后台代码

  • MultipartFile aa 包含二进制数据和文件名称
@RequestMapping("upload")
//文件上传
public String upload(MultipartFile aa, HttpServletRequest request) throws IOException {
//以相对路径获取绝对路径 (这的路径是你要将文件上传的路径)
//这里MultipartFile aa 包含二进制数据和文件名称
String realPath = request.getSession().getServletContext().getRealPath("files");
//获取原文件名
String originalFilename = aa.getOriginalFilename();
//创建日期文件夹
String dateDir = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
File finalPath = new File(realPath, dateDir);
//文件夹不存在就创建
if(!finalPath.exists()){
finalPath.mkdirs();
}
//上传文件
aa.transferTo(new File(finalPath,originalFilename));
//简单版本的其实就一行代码就行
//aa.transferTo(new File(request.getSession().getServletContext().getRealPath("files"),aa.originalFilename);
return "upload";
}

@RequestMapping("download")
//文件下载
public String download(String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException {
//获取绝对路径
String realPath = request.getSession().getServletContext().getRealPath("/files/2019-07-19");
//读取文件
FileInputStream is = new FileInputStream(new File(realPath,fileName));
//设置响应头信息
response.setHeader("content-disposition","attachment;fileName="+ URLEncoder.encode(fileName,"UTF-8"));
//设置响应类型
String mimeType = request.getSession().getServletContext().getMimeType("." + FilenameUtils.getExtension(fileName));
response.setContentType(mimeType+";charset=UTF-8");
//获取响应输出流
ServletOutputStream os = response.getOutputStream();
//文件拷贝
IOUtils.copy(is,os);
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(os);

return null;
}

前台代码

<!--点击上传-->
<form action="${pageContext.request.contextPath}/file/upload" method="post" enctype="multipart/form-data">
<input type="file" name="aa">
<input type="submit" value="提交">
</form>

<!--点击下载-->
<href="${pageContext.request.contextPath}/file/download?fileName=1.jpg">1.jpg</a>


<!--
1. 表单提交方式必须是post
2. 表单的enctype属性必须为multipart/form-data
3. 后台接受变量名字要与文件选择name属性一致
-->

修改文件上传大小

#上传时出现如下异常:  上传文件的大小超出默认配置  默认10M   
nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (38443713) exceeds the configured maximum (10485760)

#修改上传文件大小: (SpringBoot 1.5.7 版本)
spring:
http:
multipart:
max-request-size: 209715200 #用来控制文件上传大小的限制
max-file-size: 209715200 #用来指定服务端最大文件大小

#修改上传文件大小: (SpringBoot 2.0.6 版本)
spring:
servlet:
multipart:
enabled: true
max-file-size: 10Mb #用来指定服务端最大文件大小
max-request-size: 50Mb #用来控制文件上传大小的限制

注意事项

不要忘记关流,一定要设置响应头信息,否则会出现中文乱码,前台form表单不要忘了加enctype属性为multipart/form-data