TestController

    1. package controller;
    2. import org.apache.commons.io.FileUtils;
    3. import org.springframework.http.HttpHeaders;
    4. import org.springframework.http.HttpStatus;
    5. import org.springframework.http.MediaType;
    6. import org.springframework.http.ResponseEntity;
    7. import org.springframework.stereotype.Controller;
    8. import org.springframework.web.bind.annotation.RequestMapping;
    9. import java.io.File;
    10. import java.io.IOException;
    11. @Controller
    12. public class TestController {
    13. /**
    14. * 原生方式
    15. *
    16. * @RequestMapping("download.do") public void download(HttpServletRequest request,HttpServletResponse response) throws Exception {
    17. * //1.获取请求传递过来的文件名
    18. * String fileName = request.getParameter("fileName");
    19. * //2.直接创建文件输入流读取文件
    20. * InputStream inputStream = new FileInputStream("D://test//"+fileName);
    21. * //3.做响应啦----设置
    22. * // 如果服务端存储的文件名字含有中文,需要处理一下
    23. * fileName = URLEncoder.encode(fileName,"UTF-8");
    24. * // 响应信息头
    25. * response.setContentType("application/x-msdownload");
    26. * response.setHeader("Content-disposition","attachment;filename="+fileName);
    27. * //4.正式开始写数据(输出流)
    28. * OutputStream outputStream = response.getOutputStream();
    29. * byte[] b = new byte[1024];
    30. * int length = inputStream.read(b);//读取有效字节个数
    31. * while(length!=-1){
    32. * outputStream.write(b,0,length);
    33. * outputStream.flush();
    34. * length = inputStream.read(b);
    35. * }
    36. * }
    37. * @return
    38. */
    39. //基于SpringMVC方式实现文件下载
    40. @RequestMapping("download.do")
    41. public ResponseEntity download(String fileName) throws IOException {//fileName变量 名字是框架帮我们注入进去的 帮我们组合成了String
    42. //读取文件
    43. File file = new File("D://" + fileName);
    44. //设置响应信息相关
    45. //如果有中文,需要处理 new String(byte[],"字符集")
    46. fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
    47. //响应信息头
    48. HttpHeaders headers=new HttpHeaders();
    49. headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    50. headers.setContentDispositionFormData("attachment",fileName);
    51. //将响应信息存入一个返回值对象内即可----ResponseEntity
    52. byte[] b= FileUtils.readFileToByteArray(file);
    53. return new ResponseEntity(b,headers, HttpStatus.CREATED);
    54. }
    55. }

    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>