不依赖框架的文件下载

前端之家收集整理的这篇文章主要介绍了不依赖框架的文件下载前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. package com.utils;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.net.URLEncoder;
  8.  
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11.  
  12. /**
  13. * @ClassName: FileUtils.java
  14. *
  15. * @Description: 文件下载
  16. *
  17. * @author GERRARD
  18. *
  19. * @date 2015年1月27日下午3:10:10
  20. *
  21. */
  22. public final class FileUtils {
  23.  
  24. /**
  25. * 文件下载
  26. *
  27. * @param request
  28. * @param response
  29. * @param filePath
  30. * 文件相对路径(带文件名和后缀)
  31. * @throws IOException
  32. */
  33. public static void downloadFile(HttpServletRequest request,HttpServletResponse response,String filePath) throws IOException {
  34.  
  35. // 下载文件所在路径
  36. String basePath = request.getSession().getServletContext()
  37. .getRealPath("/");
  38. String downloadPath = basePath + filePath;
  39.  
  40. File fn = new File(downloadPath);
  41.  
  42. // 设置下载文件
  43. String fileName = fn.getName();
  44.  
  45. // 读取下载文件
  46. InputStream inStream = new FileInputStream(downloadPath);
  47.  
  48. // 设置输出的格式
  49. response.reset();
  50. response.setContentType("APPLICATION/OCTET-STREAM");
  51. fileName = URLEncoder.encode(fileName,"utf-8");
  52. response.setHeader("Content-Disposition","attachment; filename=\"" + fileName + "\"");
  53. // 循环取出流中的数据
  54. byte[] b = new byte[100];
  55. int len;
  56. try {
  57. while ((len = inStream.read(b)) > 0) {
  58. response.getOutputStream().write(b,len);
  59. }
  60. inStream.close();
  61. response.getOutputStream().close();
  62. } catch (IOException e) {
  63. e.printStackTrace();
  64. inStream.close();
  65. response.getOutputStream().close();
  66. }
  67. }
  68. }

Action中调用

  1. FileUtils.downloadFile(ServletActionContext.getRequest(),ServletActionContext.getResponse(),"/WEB-INF/model/template/"+ fileName);
其中 ServletActionContext.getRequest(),ServletActionContext.getResponse()是struts2中使用,不同框架不同。

猜你在找的设计模式相关文章