javaweb上传下载实例完整版解析(上)
发布时间 - 2026-01-10 22:47:12 点击率:次在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现,重点在文件上传

对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件。这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,struts上传的功能就是基于这个实现的。common-fileupload是依赖于common-io这个包的,所以还需要下载这个包。
一、开发环境搭建
创建一个FileUploadAndDownLoad项目,加入Apache的commons-fileupload文件上传组件的相关Jar包,如下图所示:
二、实现文件上传
2.1 文件上传页面
upload.html代码如下
<div>
<h5>文件上传</h5><hr/>
<form id="file_upload_id" name="file_upload_name" >
<div><input type="file" name="file_upload"/></div>
<div onclick = "upload()"><input type="button" value="上传" /></div><br>
<div>
<span id="typeValue"></span>
<input id="type" type="hidden" name="input_type">
</div>
<div>
<span id="sizeValue"></span>
<input id="size" type="hidden" name="input_size">
</div>
</form>
</div>
<script>
$(function(){
a();
});
function a(){
var size=1024 * 1024 * 50;
var type=
"gif,jpg,jpeg,png,bmp,swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb,doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2,jsp";
$("#type").val(type);//利用input传值到后台
$("#typeValue").html("文件格式限制为:"+type);//显示
$("#size").val(size);
$("#sizeValue").html("文件大小限制为:"+size);
}
function upload(){
var formdata = new FormData($('#file_upload_id')[0]);
$.ajax({
url: 'cloud/load/upload',
type: 'POST',
data: formdata,
dataType:'JSON',
cache: false,
processData: false,
contentType: false ,
success : function(date){
alert("success");
},
error : function(e){
alert("error");
}
});
}
</script>
2.2 controller
package com.cloud.web.controller;
import java.io.IOException;
import java.util.HashMap;
import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.cloud.web.service.FileLoadService;
@Controller
@RequestMapping("/load")
public class LoadController {
@Resource
public FileLoadService fileLoadService;
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public HashMap<String,Object> upload(@RequestParam("file_upload") MultipartFile file,@RequestParam("input_type") String extName,@RequestParam("input_size") String size, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws ServletException, IOException {
HashMap<String,Object> map = new HashMap<String,Object>();
request.setCharacterEncoding("UTF-8");// 解决上传的中文文件乱码问题
response.setContentType("text/html;charset=UTF-8");
long fileSizeMax=Long.parseLong(size);
String mes =fileLoadService.doUpload(file,request, extName, fileSizeMax);
map.put("mes", mes);
return map;
}
}
2.3 service
FileLoadServiceImpl.java程序如下:
package com.cloud.web.service.impl;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.cloud.web.service.FileLoadService;
@Service
public class FileLoadServiceImpl implements FileLoadService{
@Override
public String doUpload(MultipartFile file, HttpServletRequest request, String extName, long fileSizeMax) throws ServletException, IOException{
// 存放路径
String realPath = request.getSession().getServletContext().getRealPath("/WEB-INF/")+"/upload/test/";
String msg="";//返回消息
try {
String fileName = file.getOriginalFilename();// 获取上传的文件的文件名
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();// 获取上传文件的扩展名
if (fileName != null) {
System.out.println("上传的文件的扩展名是:" + fileExt);
if(!extName.contains(fileExt)){
System.out.println("上传文件扩展名是不允许的扩展名:" + fileExt);
msg = msg + "文件:" + fileName + ",上传文件扩展名是不允许的扩展";
}else if(file.getSize() > fileSizeMax){
// 如果需要限制上传的文件大小,不超过最大限制
System.out.println("上传文件大小:" + file.getSize());
msg = msg + "文件:" + fileName + ",上传文件大小超过限制大小";
}else{
Date now = new Date();
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String str = df.format(now);
String nFileName=str+"_"+fileName;
// 生成一个子目录
String childDirectory = genChildDirectory(realPath);
File storeDirectory = new File(realPath + File.separator + childDirectory);
//如果目录不存在,就创建一个
if (!storeDirectory.exists()) {
storeDirectory.mkdirs();
}
// 获取item中的上传文件的输入流
InputStream is = file.getInputStream();
//创建一个文件输出流
FileOutputStream out = new FileOutputStream(storeDirectory + "\\" + nFileName);
//创建一个缓冲区
byte buffer[] = new byte[1024];
//判断输入流中的数据是否已经读完的标致
int len = 0;
while((len = is.read(buffer)) > 0){
out.write(buffer, 0, len);
}
out.close();//关闭输出流
is.close(); //关闭输入流
msg="file:" + fileName + ",success";
}
}
} catch (Exception e) {
e.printStackTrace();
}
return msg;
}
// 按照时间创建分目录 放置一个文件夹下面的文件过多
@Override
public String genChildDirectory(String realPath) {
Date now = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String str = df.format(now);
File file = new File(realPath, str);
if (!file.exists()) {
file.mkdirs();
}
return str;
}
}
界面展示:
文件上传位置:
以上文件上传功能完成!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# javaweb
# 上传
# 下载
# javaweb上传下载实例完整版解析(下)
# JavaWeb文件上传下载实例讲解(酷炫的文件上传技术)
# JavaWeb实现文件上传下载功能实例详解
# Javaweb实现上传下载文件的多种方法
# JavaWeb文件上传下载功能深入分析(二)
# JavaWeb文件上传下载功能示例解析
# JavaWeb中struts2实现文件上传下载功能实例解析
# JavaWeb实现文件上传下载功能实例解析
# JavaWeb中上传和下载文件实例代码
# 文件上传
# 创建一个
# 扩展名
# 上传文件
# 文件扩展名
# 不存在
# 然后再
# 还需要
# 不超过
# 所示
# 开源
# 官网
# 大家多多
# 如下图
# 过程中
# 依赖于
# jpg
# docx
# doc
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
如何用美橙互联一键搭建多站合一网站?
Laravel如何使用查询构建器?(Query Builder高级用法)
微信小程序 canvas开发实例及注意事项
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
Python面向对象测试方法_mock解析【教程】
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
WEB开发之注册页面验证码倒计时代码的实现
iOS中将个别页面强制横屏其他页面竖屏
如何在腾讯云服务器上快速搭建个人网站?
WordPress 子目录安装中正确处理脚本路径的完整指南
香港服务器如何优化才能显著提升网站加载速度?
中山网站制作网页,中山新生登记系统登记流程?
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
JS弹性运动实现方法分析
昵图网官网入口 昵图网素材平台官方入口
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
Laravel Docker环境搭建教程_Laravel Sail使用指南
Laravel如何实现本地化和多语言支持?(i18n教程)
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
Android滚轮选择时间控件使用详解
Python制作简易注册登录系统
装修招标网站设计制作流程,装修招标流程?
Java垃圾回收器的方法和原理总结
微信小程序 配置文件详细介绍
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
手机网站制作与建设方案,手机网站如何建设?
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
香港服务器网站推广:SEO优化与外贸独立站搭建策略
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
如何登录建站主机?访问步骤全解析
大同网页,大同瑞慈医院官网?
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
如何快速搭建自助建站会员专属系统?
Android中AutoCompleteTextView自动提示
教你用AI将一段旋律扩展成一首完整的曲子
javascript基本数据类型及类型检测常用方法小结
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
如何在景安服务器上快速搭建个人网站?
北京企业网站设计制作公司,北京铁路集团官方网站?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
Laravel如何使用Telescope进行调试?(安装和使用教程)
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
如何在万网自助建站中设置域名及备案?

