要使用文件的上传下载首先需要配置上传和下载的环境
添加依赖
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
springMVC配置文件中添加bean
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 如果上传后出现文件名中文乱码可以使用该属性解决 -->
<property name="defaultEncoding" value="UTF-8"/>
<!-- 单位是字节,不设置默认不限制总的上传文件大小,这里设置总的上传文件大小不超过10M(10*1024*1024) -->
<property name="maxUploadSize" value="10485760"/>
<!-- 跟maxUploadSize差不多,不过maxUploadSizePerFile是限制每个上传文件的大小,而maxUploadSize是限制总的上传文件大小 -->
<property name="maxUploadSizePerFile" value="10485760"/>
</bean>
一.上传文件
1.upload.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="text" name="userName"/>
<input type="button" id="upload" value="上传"/>
</form>
</body>
</html>
<script src="js/jquery3.4.1.js"></script>
<script>
$(function () {
$("#upload").click(function () {
var formdata = new FormData($("form")[0]);
$.ajax({
url: '/upload.do',
method:'post',
data: formdata,
processData : false, // 使数据不做处理
contentType : false, // 不要设置Content-Type请求头
success: function () {
alert("success")
}
});
})
});
</script>
2.upload.do
//文件上传
@RequestMapping( value = "upload",method = RequestMethod.POST)
public void upload(String userName, @RequestParam("file") MultipartFile file, HttpServletRequest request){
String path = request.getSession().getServletContext().getRealPath("/upload");
System.out.println(userName);
String uploadPath = path+"/"+file.getOriginalFilename();
System.out.println(uploadPath);
try {
file.transferTo(new File(uploadPath));
} catch (IOException e) {
e.printStackTrace();
}
}
二、文件下载
1.download.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>文件下载</title>
</head>
<body>
<a href="/download.do?fileName=qq下载01.png">qq下载01.png</a>
</body>
</html>
2.download.do
//下载文件
@RequestMapping(value = "download",method = RequestMethod.GET)
public void download(String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setCharacterEncoding("UTF-8");
// 响应给浏览器一个multipart/form-data形式的表单
response.setContentType("multipart/form-data");
//告诉浏览器以附件的形式下载
response.setHeader("Content-Disposition","attachment;fileName="+ URLEncoder.encode(fileName,"UTF-8"));
System.out.println(fileName);
String path = request.getSession().getServletContext().getRealPath("/upload");
System.out.println(path);
String downloadPatn = path+"\\"+fileName;
System.out.println(downloadPatn);
InputStream in = new FileInputStream(downloadPatn);
ServletOutputStream out = response.getOutputStream();
byte[] buffs = new byte[1024];
int len = 0;
while ((len=in.read(buffs))!=-1){
out.write(buffs,0,len);
}
out.close();
in.close();
}