tsurumure 3 mēneši atpakaļ
vecāks
revīzija
d13fb2c159

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

@@ -61,4 +61,12 @@ public class SysFileMultipartController {
         return Result.success().put("data", sysFileMultipartService.listParts(upload_id, object_key));
     }
 
+    @SysLog("获取文件MD5 (临时)")
+    @Operation(summary = "获取文件MD5 (临时)")
+    @PreAuthorize("@sr.hasPermission(1.1)")
+    @PostMapping("/api/upload/getFileMd5")
+    public Result getFileMd5(@RequestParam("file") MultipartFile multipartFile, Long category_id, Integer upload_chunk_count, String md5) {
+        return Result.success().put("data", sysFileMultipartService.multipartUploadInit(multipartFile, category_id, upload_chunk_count, md5));
+    }
+
 }

+ 61 - 59
src/main/java/com/backendsys/modules/upload/service/impl/SysFileMultipartServiceImpl.java

@@ -174,65 +174,67 @@ public class SysFileMultipartServiceImpl implements SysFileMultipartService {
 
         SysFile sysFileEntity = null;
 
-        // [弃用] 获取大文件流需要比较久的时间
-        // String md5 = DigestUtil.md5Hex(multipartFile.getInputStream());
-
-        // 如果开启了 MD5秒传,则判断文件是否上传过,是的话就直接返回
-        // [系统配置] 是否启用文件MD5查重 (仅判断用户自己上传过的文件)
-        // - 存在,则根据文件MD5 判断是否上传过文件 (仅更新时间,不上传已存在的文件,允许更新文件分类)
-        // - 存在,如果存在两个相同 md5 以上的文件,则需要排重后再上传 (如果是不同用户
-        // - 不存在,则走上传流程
-        Boolean is_exist = false;
-        if (UPLOAD_MD5_DUPLICATE.get()) {
-
-            // 排除文件异常的情况(出现两个以上相同MD5的文件)
-            LambdaQueryWrapper<SysFile> wrapperFile = new LambdaQueryWrapper<>();
-            wrapperFile.eq(SysFile::getMd5, md5);
-            wrapperFile.eq(SysFile::getUser_id, SecurityUtil.getUserId());
-
-            // [DB] 查询已存在的文件分块记录 (只有完全上传成功,才会有 MD5)
-            // - 异常情况:如果有两个相同的文件,一个上传50%,一个上传成功,就会出现以下这种情况,需要手动解决
-            List<SysFile> sysFileEntityList = sysFileDao.selectList(wrapperFile);
-            if (sysFileEntityList != null && sysFileEntityList.size() > 1) {
-                throw new CustException("存在 " + sysFileEntityList.size() + " 个相同MD5 (" + md5 + ") 的文件,请删除后再重新上传");
-            }
-
-            if (sysFileEntityList != null && sysFileEntityList.size() > 0) {
-                is_exist = true;
-                // 将已存在的文件,赋值
-                sysFileEntity = sysFileEntityList.get(0);
-                // [DB] 更新文件 (文件分类、上传时间)
-                sysFileEntity.setCategory_id(category_id);
-                sysFileEntity.setUpload_time(DateUtil.now());
-                sysFileDao.updateById(sysFileEntity);
-            } else {
-                // [DB] 创建新的文件
-                sysFileEntity = uploadInitEvent(multipartFile, category_id, UPLOAD_TARGET.get(), upload_chunk_count, md5);
-                // [格式化] 封面 (图片类型)
-                sysFileEntity = setThumbUrl(sysFileEntity, UPLOAD_THUMB_SIZE.get(), UPLOAD_THUMB_SIZE.get(), StyleEnums.THUMB_BACKGROUND.getValue());
-            }
-
-        } else {
-            // 不开启 MD5秒 传,则直接初始化分块
-            // [DB] 创建新的文件
-            sysFileEntity = uploadInitEvent(multipartFile, category_id, UPLOAD_TARGET.get(), upload_chunk_count, md5);
-            // [格式化] 封面 (图片类型)
-            sysFileEntity = setThumbUrl(sysFileEntity, UPLOAD_THUMB_SIZE.get(), UPLOAD_THUMB_SIZE.get(), StyleEnums.THUMB_BACKGROUND.getValue());
-        }
-
-        Map<String, Object> resp = new LinkedHashMap<>();
-        resp.put("target", UPLOAD_TARGET.get());
-        resp.put("target_label", StyleEnums.targetToLabel(UPLOAD_TARGET.get()));
-        resp.put("upload_chunk_count", upload_chunk_count);
-        resp.put("upload_id", sysFileEntity.getUpload_id());
-        resp.put("object_key", sysFileEntity.getObject_key());
-        resp.put("md5", md5);
-        resp.put("is_exist", is_exist);
-        resp.put("file_info", is_exist ? sysFileEntity : null);
-        return resp;
-
-//        } catch (InterruptedException e) { throw new RuntimeException(e);
-//        } finally { lock.unlock(); }
+        return Map.of("test", 1);
+
+//        // [弃用] 获取大文件流需要比较久的时间
+//        // String md5 = DigestUtil.md5Hex(multipartFile.getInputStream());
+//
+//        // 如果开启了 MD5秒传,则判断文件是否上传过,是的话就直接返回
+//        // [系统配置] 是否启用文件MD5查重 (仅判断用户自己上传过的文件)
+//        // - 存在,则根据文件MD5 判断是否上传过文件 (仅更新时间,不上传已存在的文件,允许更新文件分类)
+//        // - 存在,如果存在两个相同 md5 以上的文件,则需要排重后再上传 (如果是不同用户
+//        // - 不存在,则走上传流程
+//        Boolean is_exist = false;
+//        if (UPLOAD_MD5_DUPLICATE.get()) {
+//
+//            // 排除文件异常的情况(出现两个以上相同MD5的文件)
+//            LambdaQueryWrapper<SysFile> wrapperFile = new LambdaQueryWrapper<>();
+//            wrapperFile.eq(SysFile::getMd5, md5);
+//            wrapperFile.eq(SysFile::getUser_id, SecurityUtil.getUserId());
+//
+//            // [DB] 查询已存在的文件分块记录 (只有完全上传成功,才会有 MD5)
+//            // - 异常情况:如果有两个相同的文件,一个上传50%,一个上传成功,就会出现以下这种情况,需要手动解决
+//            List<SysFile> sysFileEntityList = sysFileDao.selectList(wrapperFile);
+//            if (sysFileEntityList != null && sysFileEntityList.size() > 1) {
+//                throw new CustException("存在 " + sysFileEntityList.size() + " 个相同MD5 (" + md5 + ") 的文件,请删除后再重新上传");
+//            }
+//
+//            if (sysFileEntityList != null && sysFileEntityList.size() > 0) {
+//                is_exist = true;
+//                // 将已存在的文件,赋值
+//                sysFileEntity = sysFileEntityList.get(0);
+//                // [DB] 更新文件 (文件分类、上传时间)
+//                sysFileEntity.setCategory_id(category_id);
+//                sysFileEntity.setUpload_time(DateUtil.now());
+//                sysFileDao.updateById(sysFileEntity);
+//            } else {
+//                // [DB] 创建新的文件
+//                sysFileEntity = uploadInitEvent(multipartFile, category_id, UPLOAD_TARGET.get(), upload_chunk_count, md5);
+//                // [格式化] 封面 (图片类型)
+//                sysFileEntity = setThumbUrl(sysFileEntity, UPLOAD_THUMB_SIZE.get(), UPLOAD_THUMB_SIZE.get(), StyleEnums.THUMB_BACKGROUND.getValue());
+//            }
+//
+//        } else {
+//            // 不开启 MD5秒 传,则直接初始化分块
+//            // [DB] 创建新的文件
+//            sysFileEntity = uploadInitEvent(multipartFile, category_id, UPLOAD_TARGET.get(), upload_chunk_count, md5);
+//            // [格式化] 封面 (图片类型)
+//            sysFileEntity = setThumbUrl(sysFileEntity, UPLOAD_THUMB_SIZE.get(), UPLOAD_THUMB_SIZE.get(), StyleEnums.THUMB_BACKGROUND.getValue());
+//        }
+//
+//        Map<String, Object> resp = new LinkedHashMap<>();
+//        resp.put("target", UPLOAD_TARGET.get());
+//        resp.put("target_label", StyleEnums.targetToLabel(UPLOAD_TARGET.get()));
+//        resp.put("upload_chunk_count", upload_chunk_count);
+//        resp.put("upload_id", sysFileEntity.getUpload_id());
+//        resp.put("object_key", sysFileEntity.getObject_key());
+//        resp.put("md5", md5);
+//        resp.put("is_exist", is_exist);
+//        resp.put("file_info", is_exist ? sysFileEntity : null);
+//        return resp;
+//
+////        } catch (InterruptedException e) { throw new RuntimeException(e);
+////        } finally { lock.unlock(); }
     }
 
     // 2.上传分块