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;@Controllerpublic 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);//将响应信息存入一个返回值对象内即可----ResponseEntitybyte[] 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>
