CommonController.java 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package com.controller.common;
  2. import cn.com.ty.lift.common.utils.ValuePool;
  3. import cn.com.ty.lift.common.verify.Validate;
  4. import cn.hutool.core.util.ArrayUtil;
  5. import cn.hutool.core.util.StrUtil;
  6. import com.baomidou.mybatisplus.core.toolkit.IdWorker;
  7. import lombok.AllArgsConstructor;
  8. import lombok.extern.slf4j.Slf4j;
  9. import org.springframework.web.bind.annotation.PostMapping;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.RequestParam;
  12. import org.springframework.web.bind.annotation.RestController;
  13. import org.springframework.web.multipart.MultipartFile;
  14. import java.time.LocalDate;
  15. import java.time.format.DateTimeFormatter;
  16. import java.util.*;
  17. /**
  18. * 图片上传接口
  19. */
  20. @Slf4j
  21. @AllArgsConstructor
  22. @RestController
  23. @RequestMapping("common")
  24. public class CommonController {
  25. private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd");
  26. private SystemConfiguration systemConfiguration;
  27. /**
  28. * 批量上传多个文件
  29. *
  30. * @param files 文件列表
  31. * @return RestResponse
  32. */
  33. @PostMapping("uploads")
  34. public RestResponse uploads(@RequestParam("files") MultipartFile[] files) {
  35. Validate.notTrue(ArrayUtil.isEmpty(files), ValuePool.UPLOAD_DATA_MISSING);
  36. Map<String, MultipartFile> fileMap = new HashMap<>();
  37. //1 先解析文件格式
  38. for (MultipartFile file : files) {
  39. String fileName = handleFile(file);
  40. fileMap.put(fileName, file);
  41. }
  42. //2 批量上传
  43. try {
  44. List<String> urls = new ArrayList<>();
  45. for (Map.Entry<String, MultipartFile> entry : fileMap.entrySet()) {
  46. String url = systemConfiguration.build().putObject(entry.getKey(), entry.getValue().getBytes());
  47. log.info("upload file complete, file URL: {}", url);
  48. Validate.notNull(url, ValuePool.UPLOAD_FAIL);
  49. urls.add(url);
  50. }
  51. return RestResponse.success(urls);
  52. } catch (Exception e) {
  53. log.error("upload file occur exception", e);
  54. return RestResponse.fail(ValuePool.UPLOAD_FAIL);
  55. }
  56. }
  57. /**
  58. * 上传单个文件
  59. *
  60. * @param file 上传的文件
  61. * @return RestResponse
  62. */
  63. @PostMapping("upload")
  64. public RestResponse upload(@RequestParam("file") MultipartFile file) {
  65. Validate.notTrue(Objects.isNull(file) || file.isEmpty(), ValuePool.UPLOAD_DATA_MISSING);
  66. String fileName = handleFile(file);
  67. try {
  68. String url = systemConfiguration.build().putObject(fileName, file.getBytes());
  69. log.info("upload file complete, file URL: {}", url);
  70. return RestResponse.success(url);
  71. } catch (Exception e) {
  72. log.error("upload file occur exception", e);
  73. return RestResponse.fail(ValuePool.UPLOAD_FAIL);
  74. }
  75. }
  76. /**
  77. * 校验文件大小,文件格式,生成新文件名
  78. *
  79. * @param file the {@link MultipartFile} to upload
  80. * @return the name string of the file.
  81. */
  82. private String handleFile(MultipartFile file) {
  83. Validate.notTrue(Objects.isNull(file) || file.isEmpty(), ValuePool.UPLOAD_DATA_MISSING);
  84. // 获取文件名,带后缀
  85. String originalFilename = file.getOriginalFilename();
  86. log.info("the original file name:{}", originalFilename);
  87. // 获取文件的后缀格式
  88. Validate.notNull(originalFilename, ValuePool.UPLOAD_ORIGINAL_NAME_MISSING);
  89. int lastDotIndex = originalFilename.lastIndexOf(ValuePool.DOT);
  90. Validate.notTrue(-1 == lastDotIndex, ValuePool.UPLOAD_FORMAT_MISSING);
  91. String fileSuffix = originalFilename.substring(lastDotIndex).toLowerCase();
  92. Validate.notNull(fileSuffix, ValuePool.UPLOAD_FORMAT_ILLEGAL);
  93. long fileSize = file.getSize();
  94. log.info("the size of file: {}", fileSize);
  95. if (StrUtil.equalsAny(fileSuffix, ValuePool.UPLOAD_PICS)) {
  96. Validate.notTrue(fileSize > ValuePool.UPLOAD_MAX_SIZE_PIC, ValuePool.UPLOAD_MAX_SIZE_PIC_DESC);
  97. } else if (StrUtil.equalsAny(fileSuffix, ValuePool.UPLOAD_FILES)) {
  98. Validate.notTrue(fileSize > ValuePool.UPLOAD_MAX_SIZE_FILE, ValuePool.UPLOAD_MAX_SIZE_FILE_DESC);
  99. } else if (StrUtil.equalsAny(fileSuffix, ValuePool.UPLOAD_VIDEOS)) {
  100. Validate.notTrue(fileSize > ValuePool.UPLOAD_MAX_SIZE_VIDEO, ValuePool.UPLOAD_MAX_SIZE_VIDEO_DESC);
  101. } else {
  102. throw Validate.validateException(ValuePool.UPLOAD_FORMAT_NOT_SUPPORT);
  103. }
  104. String fileName = StrUtil.format("{}/{}{}", DATE_TIME_FORMATTER.format(LocalDate.now()), IdWorker.getIdStr(), fileSuffix);
  105. log.info("the new file name:{}", fileName);
  106. return fileName;
  107. }
  108. }