TestController
package controller;
import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.io.File;
import java.io.IOException;
@Controller
public class TestController {
/**
* 原生方式
*
* @RequestMapping("download.do") public void download(HttpServletRequest request,HttpServletResponse response) throws Exception {
* //1.获取请求传递过来的文件名
* String fileName = request.getParameter("fileName");
* //2.直接创建文件输入流读取文件
* InputStream inputStream = new FileInputStream("D://test//"+fileName);
* //3.做响应啦----设置
* // 如果服务端存储的文件名字含有中文,需要处理一下
* fileName = URLEncoder.encode(fileName,"UTF-8");
* // 响应信息头
* response.setContentType("application/x-msdownload");
* response.setHeader("Content-disposition","attachment;filename="+fileName);
* //4.正式开始写数据(输出流)
* OutputStream outputStream = response.getOutputStream();
* byte[] b = new byte[1024];
* int length = inputStream.read(b);//读取有效字节个数
* while(length!=-1){
* outputStream.write(b,0,length);
* outputStream.flush();
* length = inputStream.read(b);
* }
* }
* @return
*/
//基于SpringMVC方式实现文件下载
@RequestMapping("download.do")
public ResponseEntity download(String fileName) throws IOException {//fileName变量 名字是框架帮我们注入进去的 帮我们组合成了String
//读取文件
File file = new File("D://" + fileName);
//设置响应信息相关
//如果有中文,需要处理 new String(byte[],"字符集")
fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
//响应信息头
HttpHeaders headers=new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment",fileName);
//将响应信息存入一个返回值对象内即可----ResponseEntity
byte[] b= FileUtils.readFileToByteArray(file);
return new ResponseEntity(b,headers, HttpStatus.CREATED);
}
}
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
</head>
<body>
<a href="download.do?fileName=服务外包作业1.docx">download</a>
</body>
</html>