SysFileController.java 6.0 KB

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