DownloadServiceImpl.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package com.caimei.service.auth.impl;
  2. import com.caimei.mapper.cmMapper.FileMapper;
  3. import com.caimei.model.en.QrCodeSize;
  4. import com.caimei.model.po.ProductImagePo;
  5. import com.caimei.model.po.UploadFilePo;
  6. import com.caimei.service.auth.DownloadService;
  7. import com.caimei.service.auth.UploadService;
  8. import com.caimei.utils.ImageUtils;
  9. import com.caimei.utils.OSSUtils;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.beans.factory.annotation.Value;
  13. import org.springframework.stereotype.Service;
  14. import javax.annotation.Resource;
  15. import javax.imageio.ImageIO;
  16. import javax.servlet.http.HttpServletRequest;
  17. import javax.servlet.http.HttpServletResponse;
  18. import java.awt.image.BufferedImage;
  19. import java.io.File;
  20. import java.io.FileInputStream;
  21. import java.io.IOException;
  22. import java.io.OutputStream;
  23. import java.net.URLEncoder;
  24. import java.util.ArrayList;
  25. import java.util.List;
  26. /**
  27. * Description
  28. *
  29. * @author : Aslee
  30. * @date : 2021/7/9
  31. */
  32. @Slf4j
  33. @Service
  34. public class DownloadServiceImpl implements DownloadService {
  35. @Resource
  36. private FileMapper fileMapper;
  37. private UploadService uploadService;
  38. @Value("${caimei.oldapi}")
  39. private String wwwServer;
  40. @Value("${spring.profiles.active}")
  41. private String active;
  42. @Autowired
  43. public void setUploadService(UploadService uploadService) {
  44. this.uploadService = uploadService;
  45. }
  46. @Override
  47. public void downloadFile(String ossName, String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException {
  48. OSSUtils.downFile("authFile/", ossName, fileName);
  49. download(request, response, "./" + fileName, fileName);
  50. }
  51. @Override
  52. public void downloadShopImage(Integer authUserId, Integer type, HttpServletRequest request, HttpServletResponse response) throws Exception {
  53. if (null == authUserId || null == type) {
  54. return;
  55. }
  56. ArrayList<UploadFilePo> fileList = new ArrayList<>();
  57. List<ProductImagePo> productImageList = fileMapper.getProductImageList(authUserId);
  58. if (1 == type) {
  59. productImageList.forEach(productImage -> {
  60. UploadFilePo file = new UploadFilePo();
  61. file.setFileUrl(productImage.getCertificateImage());
  62. file.setFileName(productImage.getAuthParty() + "-" + productImage.getSnCode());
  63. fileList.add(file);
  64. });
  65. } else if (2 == type) {
  66. productImageList.forEach(productImage -> {
  67. String qrCodeLink = wwwServer + "/product/auth/product-" + productImage.getProductId() + ".html";
  68. // 生成二维码
  69. BufferedImage qrCodeImage = ImageUtils.createQrCode(qrCodeLink, QrCodeSize.LARGE);
  70. String fileName = productImage.getAuthParty() + "-" + productImage.getSnCode();
  71. String imagePath = createBufferedImageFile(qrCodeImage, fileName, "png");
  72. UploadFilePo file = new UploadFilePo();
  73. file.setFileUrl(imagePath);
  74. file.setFileName(productImage.getAuthParty() + "-" + productImage.getSnCode());
  75. fileList.add(file);
  76. });
  77. } else {
  78. }
  79. String fileName = 1 == type ? "授权牌" : 2 == type ? "设备二维码" : "机构二维码";
  80. // 将授权牌压缩成zip文件
  81. String imageZipPath = uploadService.createImageZip(fileList);
  82. download(request, response, imageZipPath, fileName + ".zip");
  83. }
  84. private String createBufferedImageFile(BufferedImage qrCodeImage, String fileName, String prefix) {
  85. String filePath = "/mnt/newdatadrive/data/runtime/jar-instance/zplma/tempFile/";
  86. if ("dev".equals(active)){
  87. filePath = "D:\\WorkSpace\\file\\tempImport\\";
  88. }
  89. filePath = filePath + fileName + "." + prefix;
  90. File file = new File(filePath);
  91. try {
  92. ImageIO.write(qrCodeImage, prefix, file);
  93. } catch (Exception e) {
  94. e.printStackTrace();
  95. }
  96. return filePath;
  97. }
  98. public void download(HttpServletRequest request, HttpServletResponse response, String filePath, String fileName) throws IOException {
  99. File file = new File(filePath);
  100. // 文件存在才下载
  101. if (file.exists()) {
  102. OutputStream out = null;
  103. FileInputStream in = null;
  104. try {
  105. // 1.读取要下载的内容
  106. in = new FileInputStream(file);
  107. // 2. 告诉浏览器下载的方式以及一些设置
  108. // 解决文件名乱码问题,获取浏览器类型,转换对应文件名编码格式,IE要求文件名必须是utf-8, firefo要求是iso-8859-1编码
  109. String agent = request.getHeader("user-agent");
  110. if (agent.contains("FireFox")) {
  111. fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
  112. } else {
  113. fileName = URLEncoder.encode(fileName, "UTF-8");
  114. }
  115. // 设置下载文件的mineType,告诉浏览器下载文件类型
  116. String mineType = request.getServletContext().getMimeType(fileName);
  117. response.setContentType(mineType);
  118. // 设置一个响应头,无论是否被浏览器解析,都下载
  119. response.setHeader("Content-disposition", "attachment; filename=" + fileName);
  120. // 将要下载的文件内容通过输出流写到浏览器
  121. out = response.getOutputStream();
  122. int len = 0;
  123. byte[] buffer = new byte[1024];
  124. while ((len = in.read(buffer)) > 0) {
  125. out.write(buffer, 0, len);
  126. }
  127. } catch (IOException e) {
  128. e.printStackTrace();
  129. } finally {
  130. if (out != null) {
  131. out.close();
  132. }
  133. if (in != null) {
  134. in.close();
  135. }
  136. file.delete();
  137. }
  138. }
  139. }
  140. }