springMVC文件上传和下载功能
2018-08-13 07:39:36来源:博客园 阅读 ()
文件上传
为了能够将文件上传成功,需要将表单的method属性设置成POST,enctype设置成multipart/form-data,一旦设置为multipart/form-data,浏览器会以二进制处理表单数据,spring默认不能处理文件上传工作,要在springmvc-config.xml配置文件中配置MulipartResolver。
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 上传文件大小上限,单位为字节(10MB) -->
<property name="maxUploadSize">
<value>10485760</value>
</property>
<!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
<property name="defaultEncoding">
<value>UTF-8</value>
</property>
</bean>
配置好MultipartResolver后,实现文件上传的页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传</title>
<% String path = request.getContextPath(); %>
</head>
<body>
<h2>文件上传</h2>
<form action="<%=path%>/upload" enctype="multipart/form-data" method="post">
<table>
<tr>
<td>文件描述:</td>
<td><input type="text" name="description"></td>
</tr>
<tr>
<td>请选择文件:</td>
<td><input type="file" name="file"></td>
</tr>
<tr>
<td><input type="submit" value="上传"></td>
</tr>
</table>
</form>
</body>
</html>
创建一个FileUploadController,实现文件的上传功能,主要代码如下:
// 上传文件会自动绑定到MultipartFile中 @RequestMapping(value = "/upload", method = RequestMethod.POST) public String upload(HttpServletRequest request, @RequestParam("description") String description, @RequestParam("file") MultipartFile file) throws Exception { System.out.println(description); // 如果文件不为空,写入上传路径 if (!file.isEmpty()) { // 上传文件路径 String path = request.getServletContext().getRealPath("/images/"); // 上传文件名 String filename = file.getOriginalFilename(); String uuid = UUID.randomUUID().toString(); String name = uuid + filename.substring(filename.lastIndexOf(".")); File filepath = new File(path, name); // 判断路径是否存在,如果不存在就创建一个 if (!filepath.getParentFile().exists()) { filepath.getParentFile().mkdirs(); } // 将上传文件保存到一个目标文件当中 file.transferTo(new File(path + File.separator + name)); // 将文件复制到开发工程路径 File source = new File(path + File.separator + name); File files = new File("D:\\workspace\\FileUpload\\WebContent\\image" + File.separator + name); Files.copy(source.toPath(), files.toPath()); HttpSession session = request.getSession(); session.setAttribute("path", "/image" + File.separator + name); session.setAttribute("name", name); return "success"; } else { return "error"; }
文件下载
以上就实现了文件的上传功能,下面我们来实现文件的下载功能,文件的下载相对比较简单,只需要在页面给出一个链接,将该链接的href属性等于要下载的文件的文件名,就可以实现下载,springmvc提供了一个ResponseEntity类型,使用它可以很方便地定义返回的 HttpHeaders和HttpStatus。
下载页面(success.jsp):
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>文件下载</title> <% String name = (String) request.getSession().getAttribute("name");%> </head> <body> <p>上传成功</p> <h3>文件下载</h3> <a href="download?filename=<%=name%>"> <%=name%> </a> </body> </html>
处理方法接受页面传递的文件名filename后,使用Apache Commons FileUpload组件的FileUtils读取项目的上传文件,并将其构建成ResponseEntity对象返回客户端下载。
@RequestMapping(value = "/download") public ResponseEntity<byte[]> download(HttpServletRequest request, @RequestParam("filename") String filename, Model model) throws Exception { // 下载文件路径 String path = request.getServletContext().getRealPath("/images/"); File file = new File(path + File.separator + filename); HttpHeaders headers = new HttpHeaders(); // 下载显示的文件名,解决中文名称乱码问题 String downloadFielName = new String(filename.getBytes("UTF-8"), "iso-8859-1"); // 通知浏览器以attachment(下载方式)打开图片 headers.setContentDispositionFormData("attachment", downloadFielName); // application/octet-stream : 二进制流数据(最常见的文件下载)。 headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED); }
以上就是文件的上传和下载,如有异常欢迎留言交流!
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- 构建自己的jar包上传至Mvaen中央仓库和版本更新 2020-06-11
- Spring Boot 实现配置文件加解密原理 2020-06-08
- Java跨平台原理(字节码文件、虚拟机) 以及Java安全性 2020-06-07
- 【Java-jxl插件】【Excel文件读写报错】jxl.read.biff.BiffE 2020-06-07
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash