SpringMVC文件上传下载
-
-
- 1. 步骤分析
- 2. 代码实现
- 3. 运行测试
-
1. 步骤分析
- 创建好工程并配置好SpringMVC基本环境,并引入上传文件需要的两个包:commons-fileupload-1.3.1.jar和commons-io-2.4.jar。
- 创建上传页面upload.jsp
- 在Spring的核心配置文件中注册上传处理器
- 编写Controller层,从页面获取到然后存入指定的文件夹
- 编写下载和显示界面show.jsp
- 实现controller层下载功能
2. 代码实现
2.1、导入jar包
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
2.2、创建upload.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>图片上传下载</title>
<style>
#box{
width: 600px;
height: 600px;
margin: 100px auto;
}
</style>
</head>
<body>
<div id="box">
<form action="/springmvc/oss.do" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="img"/><br/>
<input type="submit" value="提交">
</form>
</div>
</body>
</html>
2.3、在SpringMVC核心配置文件注册上传处理器
<mvc:resources mapping="/upload/**" location="/upload/"></mvc:resources>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<!-- 设置上传文件的大小上限,单位:byte,10m=1024k 1k=1024b -->
<property name="maxUploadSize" value="10240000"/>
</bean>
2.4、编写Controller层
@RequestMapping("/upload.do")
public ModelAndView upload(MultipartFile file, HttpServletRequest req) throws IOException {
// 获得原始文件名称
String originalFileName = file.getOriginalFilename();
String suffixName = originalFileName.substring(originalFileName.lastIndexOf("."));
// 生成新文件名
String newFlieName = UUID.randomUUID().toString() +suffixName;
// 保存到指定的文件路径
String uploadDir = req.getServletContext().getRealPath("/upload");
File f = new File(uploadDir);
if(!f.exists()){
f.mkdir();
}
file.transferTo(new File(uploadDir,newFlieName));
System.out.println("文件上传到服务器的位置:" + uploadDir + "/" + newFlieName);
ModelAndView mv = new ModelAndView();
mv.addObject("newFlieName",newFlieName);
mv.addObject("originalFileName",originalFileName);
mv.setViewName("show");
return mv;
}
2.5、编写下载和显示界面show.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>图片上传下载</title>
</head>
<body>
<div>${originalFileName}上传成功!</div>
<img src="<%=request.getContextPath() %>/upload/${newFlieName}" style="width:300px; height: 200px;">
<a href="<%=request.getContextPath() %>/download.do?newImgName=${newFlieName}&originalFileName=${originalFileName}">下载</a>
</body>
</html>
2.6、实现controller层下载功能
@RequestMapping("/download.do")
public ResponseEntity<byte[]> download(HttpServletRequest request,String newImgName,String originalFileName) throws IOException {
// 获取文件所在文件夹路径
String path = request.getServletContext().getRealPath("/upload/")+newImgName;
// 读取图片
byte[] imgbody = FileUtils.readFileToByteArray(new File(path));
// 防止下载乱码
String downloadImgName = new String(originalFileName.getBytes("UTF-8"), "iso-8859-1");
// 设置响应头
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentDispositionFormData("attachment",downloadImgName);
httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
ResponseEntity<byte[]> responseEntity = new ResponseEntity<byte[]>(imgbody, httpHeaders, HttpStatus.OK);
return responseEntity;
}