1.SpringMVC框架中的文件上传
1.1 首先来看看前端JSP页面,文件上传的form表单,文件输入框写法:
其中:
form表单至少需要设置两个属性:
method属性为post;
enctype属性为multipart/form-data(设置为该属性后,浏览器会用二进制流来处理表单数据);
文件上传框:
input元素的type为“file”;
name为“filename”;
multiple属性为 multiple(multiple属性是HTML5中新属性,可支持多文件上传)
1.2 服务端文件上传配置:
(1)引入依赖:
SpringMVC框架中的文件上传解析,是利用MultipleResolver接口的实现类CommonsMultipartResolver 来实现的,所以,首先要在项目的pom.xml文件中引入相关的两个依赖包:
commons-fileupload-1.3.2.jar
commons-io-2.5.jar
(2)配置 CommonsMultipartResolver:
同时需要在web.xml中指定的SpringMVC配置文件中配置CommonsMultipartResolver 类(因该类是通过引用multipartResolver字符串获取该类对象并完成初始化的,所以配置CommonsMultipartResolver 必须指定该bean的id为multipartResolver)
其中, 通过 defaultEncoding 属性,设置的编码格式为 UTF-8,该编码格式必须与JSP页面中的pageEncoding属性一致!!!
(3)编写文件解析的控制器
需要通过 @RequestParam 注解 将前端传递参数绑定到处理方法的形参上;
最后,是整个文件上传的demo:
2.SpringMVC中的文件下载
2.1 前端JSP页面利用 a 标签 发送文件下载请求:
<a href="${pageContext.request.contextPath }/download?filename=1.jpg">
<%--文件下载--%>
</a>
2.2 在服务端的SpringMVC框架中 通过 ResponseEntity 对象,来设置HttpHeaders、HttpStatus对象,配置下载文件所需要的信息:
其中,对HttpHeaders的设置中,MediaType.APPLICATION_OCTET_STREAM的值为application/octet-stream,表示以二进制流形式下载数据
对于非中文命名的文件,上述文件下载即可;但是对于中文命名的文件下载,由于不同浏览器的转码机制不同,就是出现乱码、解析失败的情况,所以需要单独配置中文转码:
(1)前端页面发送请求前,需要对中文统一编码(利用Encoder类的encoder方法对中文编码);
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.net.URLEncoder"%>
<!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>
</head>
<body>
<a href="${pageContext.request.contextPath }/download? filename=<%= URLEncoder.encode("壁纸.jpg", "UTF-8")%>">
中文名称文件下载
</a>
</body>
</html>
(2)后台控制器中对中文名称进行解码;