SysFileController.java 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. package com.backendsys.modules.upload.controller;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.backendsys.exception.CustException;
  5. import com.backendsys.modules.common.aspect.SysLog;
  6. import com.backendsys.modules.common.config.security.enums.SecurityEnum;
  7. import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
  8. import com.backendsys.modules.common.config.security.utils.SecurityUtil;
  9. import com.backendsys.modules.common.utils.Result;
  10. import com.backendsys.modules.upload.entity.SysFile;
  11. import com.backendsys.modules.upload.entity.SysFileMergeByMd5;
  12. import com.backendsys.modules.upload.service.SysFileService;
  13. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  14. import io.swagger.v3.oas.annotations.Operation;
  15. import io.swagger.v3.oas.annotations.tags.Tag;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.security.access.prepost.PreAuthorize;
  18. import org.springframework.validation.annotation.Validated;
  19. import org.springframework.web.bind.annotation.*;
  20. import org.springframework.web.multipart.MultipartFile;
  21. import java.util.List;
  22. import java.util.stream.Collectors;
  23. @Validated
  24. @RestController
  25. @Tag(name = "文件管理")
  26. public class SysFileController {
  27. @Autowired
  28. private SecurityUtil securityUtil;
  29. @Autowired
  30. private SysFileService sysFileService;
  31. /**
  32. * 获取上传文件列表
  33. * - 缩略图 (?imageView2/1/w/100/h/100/q/60)
  34. */
  35. @Operation(summary = "获取文件列表 (全部)")
  36. @PreAuthorize("@sr.hasPermission('1.1.1')")
  37. @GetMapping("/api/upload/getUploadFileAllList")
  38. public Result getUploadFileAllList(@Validated SysFile sysFile) {
  39. return Result.success().put("data", sysFileService.selectUploadFileList(sysFile));
  40. }
  41. @Operation(summary = "获取文件列表 (我的)")
  42. @PreAuthorize("@sr.hasPermission('1.1.2')")
  43. @GetMapping("/api/upload/getUploadFileList")
  44. public Result getUploadFileList(@Validated SysFile sysFile) {
  45. sysFile.setUser_id(SecurityUtil.getUserId());
  46. return Result.success().put("data", sysFileService.selectUploadFileList(sysFile));
  47. }
  48. @Operation(summary = "查看当前上传存储介质")
  49. @PreAuthorize("@sr.hasPermission('1.1.2')")
  50. @GetMapping("/api/upload/getUploadTarget")
  51. public Result getUploadTarget(@Validated SysFile sysFile) {
  52. return Result.success().put("data", sysFileService.selectUploadTarget());
  53. }
  54. @SysLog("上传文件 (普通上传)")
  55. @Operation(summary = "上传文件 (普通上传,单文件上传不超过 100MB)")
  56. @PreAuthorize("@sr.hasPermission('1.1.3')")
  57. @PostMapping("/api/upload/uploadSmall")
  58. public Result uploadSmall(@RequestParam("file") MultipartFile multipartFile, Long category_id) {
  59. return Result.success().put("data", sysFileService.uploadSmall(multipartFile, category_id));
  60. }
  61. @SysLog("编辑文件")
  62. @Operation(summary = "编辑文件")
  63. @PreAuthorize("@sr.hasPermission('1.1.4')")
  64. @PutMapping("/api/upload/updateUploadFile")
  65. public Result updateUploadFile(@Validated(SysFile.Update.class) @RequestBody SysFile sysFile) {
  66. sysFile.setUser_id(SecurityUtil.getUserId());
  67. return Result.success().put("data", sysFileService.updateUploadFile(sysFile));
  68. }
  69. @SysLog("编辑文件 (批量)")
  70. @Operation(summary = "编辑文件 (批量)")
  71. @PreAuthorize("@sr.hasPermission('1.1.4')")
  72. @PutMapping("/api/upload/updateUploadFileBatch")
  73. public Result updateUploadFileBatch(@Validated(SysFile.UpdateBatch.class) @RequestBody SysFile sysFile) {
  74. sysFile.setUser_id(SecurityUtil.getUserId());
  75. return Result.success().put("data", sysFileService.updateUploadFileBatch(sysFile));
  76. }
  77. @SysLog("删除文件")
  78. @Operation(summary = "删除文件")
  79. @PreAuthorize("@sr.hasPermission('1.1.6')")
  80. @DeleteMapping("/api/upload/removeUploadFile")
  81. public Result removeUploadFile(@Validated(SysFile.Delete.class) @RequestBody SysFile sysFile) {
  82. // 判断是否存在
  83. String object_key = sysFile.getObject_key();
  84. SysFile querySysFile = sysFileService.getOne(new LambdaQueryWrapper<SysFile>().eq(SysFile::getObject_key, object_key));
  85. if (querySysFile == null) throw new CustException("文件不存在");
  86. // 权限:
  87. // - 删除自己 (需权限) (1.1.6)
  88. // - 删除全部 (需要子权限或超级管理员) (1.1.5)
  89. Long user_id = querySysFile.getUser_id();
  90. if (user_id.equals(SecurityUtil.getUserId()) && !securityUtil.hasPermission("1.1.5")) {
  91. throw new CustException(SecurityEnum.NOAUTH);
  92. }
  93. return Result.success().put("data", sysFileService.removeUploadFile(sysFile, querySysFile));
  94. }
  95. @SysLog("删除文件 (批量)")
  96. @Operation(summary = "删除文件 (批量)")
  97. @PreAuthorize("@sr.hasPermission('1.1.6')")
  98. @DeleteMapping("/api/upload/removeUploadFileBatch")
  99. public Result removeUploadFileBatch(@Validated(SysFile.DeleteBatch.class) @RequestBody SysFile sysFile) {
  100. // 判断是否存在
  101. List<String> object_keys = sysFile.getObject_keys();
  102. List<SysFile> querySysFileList = sysFileService.list(new LambdaQueryWrapper<SysFile>().in(SysFile::getObject_key, object_keys));
  103. if (querySysFileList != null && querySysFileList.size() != object_keys.size()) {
  104. throw new CustException("object_key 一个或多个不存在 (提交:" + object_keys.size() + ", 存在:" + querySysFileList.size() + ")");
  105. }
  106. // 权限:
  107. // - 删除自己 (需权限) (1.1.6)
  108. // - 删除全部 (需要子权限或超级管理员) (1.1.5)
  109. List<Long> sysFileListByUserId = querySysFileList.stream().map(SysFile::getUser_id).collect(Collectors.toList());
  110. if (sysFileListByUserId.contains(SecurityUtil.getUserId()) && !securityUtil.hasPermission("1.1.5")) {
  111. throw new CustException(SecurityEnum.NOAUTH);
  112. }
  113. return Result.success().put("data", sysFileService.removeUploadFileBatch(sysFile, querySysFileList));
  114. }
  115. @Operation(summary = "根据 MD5 获取文件列表 (我的)")
  116. @PreAuthorize("@sr.hasPermission('1.1.2')")
  117. @GetMapping("/api/upload/getUploadFileListByMd5")
  118. public Result getUploadFileListByMd5(@Validated(SysFile.SelectByMd5.class) SysFile sysFile) {
  119. sysFile.setUser_id(SecurityUtil.getUserId());
  120. return Result.success().put("data", sysFileService.getUploadFileListByMd5(sysFile));
  121. }
  122. @Operation(summary = "合并重复 MD5 文件")
  123. @PreAuthorize("@sr.hasPermission('1.1.4')")
  124. @PutMapping("/api/upload/mergeFileByMd5")
  125. public Result mergeFileByMd5(@Validated(SysFileMergeByMd5.MergeByMd5.class) @RequestBody SysFileMergeByMd5 sysFileMergeByMd5) {
  126. sysFileMergeByMd5.setUser_id(SecurityUtil.getUserId());
  127. return Result.success().put("data", sysFileService.mergeFileByMd5(sysFileMergeByMd5));
  128. }
  129. }