FileDownloadUtil.java 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package jnpf.util;
  2. import cn.hutool.core.net.URLEncodeUtil;
  3. import jnpf.constant.GlobalConst;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.http.MediaType;
  6. import org.springframework.http.MediaTypeFactory;
  7. import jakarta.servlet.http.HttpServletResponse;
  8. import org.springframework.util.StreamUtils;
  9. import java.io.*;
  10. @Slf4j
  11. public class FileDownloadUtil {
  12. /**
  13. * 下载文件
  14. *
  15. * @param fileName 订单信息.pdf
  16. */
  17. public static void outFile(InputStream inputStream, String fileName) {
  18. HttpServletResponse response = ServletUtil.getResponse();
  19. //设置文件写出头部
  20. setDownloadHeader(response, fileName);
  21. //写出文件
  22. try {
  23. StreamUtils.copy(inputStream, response.getOutputStream());
  24. } catch (IOException e) {
  25. log.error("写出文件失败, {}, {}, {}", fileName, e.getMessage());
  26. }
  27. }
  28. /**
  29. * 下载文件
  30. *
  31. * @param bytes
  32. * @param fileName 订单信息.pdf
  33. */
  34. public static void outFile(byte[] bytes, String fileName) {
  35. HttpServletResponse response = ServletUtil.getResponse();
  36. //设置文件写出头部
  37. setDownloadHeader(response, fileName);
  38. //设置文件大小
  39. response.setContentLength(bytes.length);
  40. //写出文件
  41. try {
  42. StreamUtils.copy(bytes, response.getOutputStream());
  43. } catch (IOException e) {
  44. log.error("写出文件失败, {}, {}, {}", fileName, e.getMessage());
  45. }
  46. }
  47. /**
  48. * 显示文件
  49. */
  50. public static void flushFile(InputStream inputStream, String fileName) {
  51. HttpServletResponse response = ServletUtil.getResponse();
  52. setFlushHeader(response, fileName);
  53. //写出文件
  54. try {
  55. StreamUtils.copy(inputStream, response.getOutputStream());
  56. } catch (IOException e) {
  57. log.error("写出图片失败, {}, {}", fileName, e.getMessage());
  58. }
  59. }
  60. /**
  61. * 显示文件
  62. */
  63. public static void flushFile(byte[] bytes, String fileName) {
  64. if(bytes == null || bytes.length == 0) {
  65. return;
  66. }
  67. HttpServletResponse response = ServletUtil.getResponse();
  68. setFlushHeader(response, fileName);
  69. //设置文件大小
  70. response.setContentLength(bytes.length);
  71. //写出文件
  72. try {
  73. StreamUtils.copy(bytes, response.getOutputStream());
  74. } catch (IOException e) {
  75. log.error("写出图片失败, {}, {}", fileName, e.getMessage());
  76. }
  77. }
  78. /**
  79. * 下载文件
  80. *
  81. * @param fileName 订单信息.pdf
  82. */
  83. public static void setDownloadHeader(HttpServletResponse response, String fileName) {
  84. //设置文件类型
  85. setFlushHeader(response, fileName);
  86. //编码的文件名字,关于中文乱码的改造
  87. // String codeFileName = fileName;
  88. // String agent = request.getHeader("USER-AGENT").toLowerCase();
  89. // if (-1 != agent.indexOf("mozilla")) {
  90. // //火狐,谷歌
  91. //// codeFileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
  92. // }
  93. response.setHeader("Content-Disposition", "attachment;filename=" + URLEncodeUtil.encode(fileName, GlobalConst.DEFAULT_CHARSET));
  94. }
  95. /**
  96. * 下载文件
  97. *
  98. * @param fileName 订单信息.pdf
  99. */
  100. public static void setFlushHeader(HttpServletResponse response, String fileName) {
  101. //设置文件类型
  102. if (fileName != null && MediaTypeFactory.getMediaType(fileName).isPresent()) {
  103. response.setContentType(MediaTypeFactory.getMediaType(fileName).orElse(MediaType.ALL).toString());
  104. }
  105. response.setCharacterEncoding("UTF-8");
  106. }
  107. }