文件下载
实现文件的下载
在SpringMVC中,如果要实现文件的下载大致可以分为如下两个步骤
- 在客户端页面使用一个文件下载的超链接,链接的href属性要指定到后台文件下载的方法以及文件名(同时你需要在文件下载目录中添加一个名称为1..jpg的文件)
<a href="${pageContext.request.contextPath}/download?fileName=1.jpg">文件下载</a>
- 在后台的Controller类中,使用Spring MVC提供的文件下载方法进行文件的下载,在Spring MVC中提供了一个ResponseEntity类型的对象,使用它可以很方便的地定义返回的HttpHeaders对象和HttpStatus对象,通过对着两个对象的设置,即可完成下载文件时需要的配置信息
@RequestMapping("/down")
public String showDownJSP(){
return "views/Down.jsp";
}
@RequestMapping("/download")
public ResponseEntity<byte[]> fileDownload(String fileName,HttpServletRequest request) throws IOException {
//指定要下载的文件所在的路径
String path = request.getServletContext().getRealPath("/upLoad/");
System.out.println(path);
//创建该文件的对象
File file = new File(path+File.separator+fileName);
//对文件进行编码,防止中文乱码
fileName = this.getFilename(fileName,request);
//设置响应头
HttpHeaders httpHeaders = new HttpHeaders();
//通知浏览器以下载的方式打开文件
httpHeaders.setContentDispositionFormData("attachment",fileName);
//定义以流的形式下载返回文件数据
httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//使用SpringMVC 框架的ResponseEntity对象封装返回下载数据
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),httpHeaders, HttpStatus.OK);
}
public String getFilename(String fileName,HttpServletRequest request) throws UnsupportedEncodingException {
//IE不同版本中UA出现的关键词
String[] IEBrowserKeyWords = {"MSIE","Trident","Edge"};
//获取请求头代理信息
String userAgent = request.getHeader("User-Agent");
for (String keyWord: IEBrowserKeyWords){
if (userAgent.contains(keyWord)){
//IE内核浏览器,统一为UTF8编码显示
return URLEncoder.encode(fileName,"UTF-8");
}
}
//火狐/谷歌等浏览器统一为ISO-8859-1编码显示
return new String (fileName.getBytes("UTF-8"),"ISO-8859-1");
}
- jsp的实现
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<title>文件的下载</title>
</head>
<body>
<h1>下载文件</h1>
<a href="${pageContext.request.contextPath}/files/download?fileName=中文测试.jpg">点击下载</a>
</body>
</html>
好了本篇文章我又成功的水完了