Преглед на файлове

Dev初始化上传接口

tsurumure преди 4 месеца
родител
ревизия
44a5b5b8b5

+ 2 - 2
src/main/java/com/backendsys/modules/upload/controller/SysFileMultipartController.java

@@ -34,8 +34,8 @@ public class SysFileMultipartController {
     @Operation(summary = "初始化分块上传")
     @PreAuthorize("@sr.hasPermission(1.1)")
     @PostMapping("/api/upload/initiateMultipartUpload")
-    public Result initiateMultipartUpload(@RequestParam("file") MultipartFile multipartFile, Long category_id, Integer target) {
-        return Result.success().put("data", sysFileMultipartService.initiateMultipartUpload(multipartFile, category_id, target));
+    public Result initiateMultipartUpload(@RequestParam("file") MultipartFile multipartFile, Long category_id) {
+        return Result.success().put("data", sysFileMultipartService.initiateMultipartUpload(multipartFile, category_id));
     }
 
     @SysLog("上传分块")

+ 1 - 1
src/main/java/com/backendsys/modules/upload/service/SysFileMultipartService.java

@@ -8,7 +8,7 @@ import java.util.Map;
 public interface SysFileMultipartService {
 
     // 初始化分块上传
-    Map<String, Object> initiateMultipartUpload(MultipartFile multipartFile, Long category_id, Integer target);
+    Map<String, Object> initiateMultipartUpload(MultipartFile multipartFile, Long category_id);
 
     // 上传分块
     Map<String, Object> uploadMultipart(MultipartFile multipartFile, String upload_id);

+ 37 - 26
src/main/java/com/backendsys/modules/upload/service/impl/SysFileMultipartServiceImpl.java

@@ -1,11 +1,14 @@
 package com.backendsys.modules.upload.service.impl;
 
+import cn.hutool.core.convert.Convert;
 import cn.hutool.core.io.file.FileNameUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.digest.DigestUtil;
 import com.backendsys.exception.CustException;
 import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
 import com.backendsys.modules.sdk.tencentcloud.cos.service.TencentCosService;
+import com.backendsys.modules.system.entity.SysCommon;
+import com.backendsys.modules.system.service.SysCommonService;
 import com.backendsys.modules.upload.dao.SysFileDao;
 import com.backendsys.modules.upload.entity.SysFile;
 import com.backendsys.modules.upload.service.SysFileMultipartService;
@@ -17,7 +20,9 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
 
 @Service
 public class SysFileMultipartServiceImpl implements SysFileMultipartService {
@@ -28,16 +33,33 @@ public class SysFileMultipartServiceImpl implements SysFileMultipartService {
     private TencentCosService tencentCosService;
     @Autowired
     private SysFileDao sysFileDao;
+    @Autowired
+    private SysCommonService sysCommonService;
+
+
+    /*
+        查一下 upload_id 多久会过期
+     */
 
     // 初始化分块上传 (获得 upload_id, object_key)
     @Override
-    public Map<String, Object> initiateMultipartUpload(MultipartFile multipartFile, Long category_id, Integer target) {
+    public Map<String, Object> initiateMultipartUpload(MultipartFile multipartFile, Long category_id) {
+
+        // 获得公共配置
+        List<SysCommon> sysCommonList = sysCommonService.getCommonByCategory("UPLOAD");
+        AtomicReference<Integer> UPLOAD_TARGET = new AtomicReference<>();
+        sysCommonList.stream().forEach(sysCommon -> {
+            if (sysCommon.getTag().equals("UPLOAD_TARGET")) UPLOAD_TARGET.set(Convert.toInt(sysCommon.getValue()));
+        });
+
+        System.out.println("[系统配置] 上传目标(-1:本地, 1:腾讯云, 2:阿里云, 3.抖音云): " + UPLOAD_TARGET);
+
 
         String upload_id = null;
         String object_key = null;
 
         // target: 上传目标 (-1:本地, 1:腾讯云, 2:阿里云, 3.抖音云)
-        if (target == 1) {
+        if (UPLOAD_TARGET.get() == 1) {
             InitiateMultipartUploadResult uploadResult = tencentCosService.initiateMultipartUpload(multipartFile);
             upload_id = uploadResult.getUploadId();
             object_key = uploadResult.getKey();
@@ -47,30 +69,19 @@ public class SysFileMultipartServiceImpl implements SysFileMultipartService {
             throw new CustException("upload_id 或 object_key 不能为空");
         }
 
-        try {
-            // 根据文件MD5 判断是否上传过文件 (如果上传过,则仅更新记录,不再上传文件)
-            String md5 = DigestUtil.md5Hex(multipartFile.getInputStream());
-            SysFile sysFileEntity = sysFileDao.selectOne(new LambdaQueryWrapper<SysFile>().eq(SysFile::getMd5, md5));
-            if (sysFileEntity == null) {
-                sysFileEntity = new SysFile();
-                sysFileEntity.setCategory_id(category_id);
-                sysFileEntity.setUser_id(httpRequestUtil.getUserId());
-                sysFileEntity.setUpload_id(upload_id);
-                sysFileEntity.setName(FileNameUtil.getName(object_key));
-                sysFileEntity.setMd5(md5);
-                sysFileEntity.setObject_key(object_key);
-                sysFileDao.insert(sysFileEntity);
-            } else {
-                // [更新] 上传文件记录
-                sysFileEntity.setCategory_id(category_id);
-                sysFileEntity.setUpload_id(upload_id);
-                sysFileEntity.setName(FileNameUtil.getName(object_key));
-                sysFileEntity.setObject_key(object_key);
-                sysFileDao.updateById(sysFileEntity);
-            }
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
+        // [新增] 上传文件记录
+        SysFile sysFileEntity = new SysFile();
+        sysFileEntity.setCategory_id(category_id);
+        sysFileEntity.setUser_id(httpRequestUtil.getUserId());
+        sysFileEntity.setUpload_id(upload_id);
+        sysFileEntity.setName(FileNameUtil.getName(object_key));
+        sysFileEntity.setObject_key(object_key);
+
+        sysFileEntity.setTarget(UPLOAD_TARGET.get());
+        sysFileEntity.setContent_type(multipartFile.getContentType());
+        sysFileEntity.setSize(multipartFile.getSize());
+        sysFileDao.insert(sysFileEntity);
+
 
         Map<String, Object> resp = new LinkedHashMap<>();
         resp.put("upload_id", upload_id);

+ 2 - 0
src/main/java/com/backendsys/modules/upload/service/impl/SysFileServiceImpl.java

@@ -208,6 +208,8 @@ public class SysFileServiceImpl extends ServiceImpl<SysFileDao, SysFile> impleme
                 // - 如果上传过,则仅更新记录,不再上传文件,仅更新文件分类
                 // - 如果存在
                 String md5 = DigestUtil.md5Hex(multipartFile.getInputStream());
+
+                // 排除文件异常的情况(出现两个以上相同MD5的文件)
                 List<SysFile> sysFileEntityList = sysFileDao.selectList(new LambdaQueryWrapper<SysFile>().eq(SysFile::getMd5, md5));
                 if (sysFileEntityList != null && sysFileEntityList.size() > 1) {
                     throw new CustException("存在 " + sysFileEntityList.size() + " 个相同Md5 (" + md5 + ") 的文件,请先排重后再上传");