CommonController.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. package com.zksy.web.controller.common;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.http.MediaType;
  10. import org.springframework.web.bind.annotation.GetMapping;
  11. import org.springframework.web.bind.annotation.PostMapping;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.RestController;
  14. import org.springframework.web.multipart.MultipartFile;
  15. import com.zksy.common.config.ZksyConfig;
  16. import com.zksy.common.core.domain.AjaxResult;
  17. import com.zksy.common.utils.StringUtils;
  18. import com.zksy.common.utils.file.FileUploadUtils;
  19. import com.zksy.common.utils.file.FileUtils;
  20. import com.zksy.framework.config.ServerConfig;
  21. /**
  22. * 通用请求处理
  23. *
  24. * @author zksy
  25. */
  26. @RestController
  27. @RequestMapping("/common")
  28. public class CommonController
  29. {
  30. private static final Logger log = LoggerFactory.getLogger(CommonController.class);
  31. @Autowired
  32. private ServerConfig serverConfig;
  33. private static final String FILE_DELIMETER = ",";
  34. /**
  35. * 通用下载请求
  36. *
  37. * @param fileName 文件名称
  38. * @param delete 是否删除
  39. */
  40. @GetMapping("/download")
  41. public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
  42. {
  43. try
  44. {
  45. if (!FileUtils.checkAllowDownload(fileName))
  46. {
  47. throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
  48. }
  49. String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
  50. String filePath = ZksyConfig.getDownloadPath() + fileName;
  51. response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
  52. FileUtils.setAttachmentResponseHeader(response, realFileName);
  53. FileUtils.writeBytes(filePath, response.getOutputStream());
  54. if (delete)
  55. {
  56. FileUtils.deleteFile(filePath);
  57. }
  58. }
  59. catch (Exception e)
  60. {
  61. log.error("下载文件失败", e);
  62. }
  63. }
  64. /**
  65. * 通用上传请求(单个)
  66. */
  67. @PostMapping("/upload")
  68. public AjaxResult uploadFile(MultipartFile file) throws Exception
  69. {
  70. try
  71. {
  72. // 上传文件路径
  73. String filePath = ZksyConfig.getUploadPath();
  74. // 上传并返回新文件名称
  75. String fileName = FileUploadUtils.upload(filePath, file);
  76. String url = serverConfig.getUrl() + fileName;
  77. AjaxResult ajax = AjaxResult.success();
  78. ajax.put("url", url);
  79. ajax.put("fileName", fileName);
  80. ajax.put("newFileName", FileUtils.getName(fileName));
  81. ajax.put("originalFilename", file.getOriginalFilename());
  82. return ajax;
  83. }
  84. catch (Exception e)
  85. {
  86. return AjaxResult.error(e.getMessage());
  87. }
  88. }
  89. /**
  90. * 通用上传请求(多个)
  91. */
  92. @PostMapping("/uploads")
  93. public AjaxResult uploadFiles(List<MultipartFile> files) throws Exception
  94. {
  95. try
  96. {
  97. // 上传文件路径
  98. String filePath = ZksyConfig.getUploadPath();
  99. List<String> urls = new ArrayList<String>();
  100. List<String> fileNames = new ArrayList<String>();
  101. List<String> newFileNames = new ArrayList<String>();
  102. List<String> originalFilenames = new ArrayList<String>();
  103. for (MultipartFile file : files)
  104. {
  105. // 上传并返回新文件名称
  106. String fileName = FileUploadUtils.upload(filePath, file);
  107. String url = serverConfig.getUrl() + fileName;
  108. urls.add(url);
  109. fileNames.add(fileName);
  110. newFileNames.add(FileUtils.getName(fileName));
  111. originalFilenames.add(file.getOriginalFilename());
  112. }
  113. AjaxResult ajax = AjaxResult.success();
  114. ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER));
  115. ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER));
  116. ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
  117. ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
  118. return ajax;
  119. }
  120. catch (Exception e)
  121. {
  122. return AjaxResult.error(e.getMessage());
  123. }
  124. }
  125. /**
  126. * 本地资源通用下载
  127. */
  128. @GetMapping("/download/resource")
  129. public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
  130. throws Exception
  131. {
  132. try
  133. {
  134. if (!FileUtils.checkAllowDownload(resource))
  135. {
  136. throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
  137. }
  138. // 本地资源路径
  139. String localPath = ZksyConfig.getProfile();
  140. // 数据库资源地址
  141. String downloadPath = localPath + FileUtils.stripPrefix(resource);
  142. // 下载名称
  143. String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
  144. response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
  145. FileUtils.setAttachmentResponseHeader(response, downloadName);
  146. FileUtils.writeBytes(downloadPath, response.getOutputStream());
  147. }
  148. catch (Exception e)
  149. {
  150. log.error("下载文件失败", e);
  151. }
  152. }
  153. }