reghao há 2 anos atrás
pai
commit
b5a01ccdcd

+ 1 - 4
dfs-store/src/main/java/cn/reghao/dfs/store/controller/ObjectUploadController.java

@@ -88,7 +88,7 @@ public class ObjectUploadController {
     }
 
     @PostMapping(value = "/")
-    public String postObject(MultipartFile file, String sha256sum, Integer channelId) throws Exception {
+    public String postObject(MultipartFile file, String objectName, String sha256sum, Integer channelId) throws Exception {
         String contentId = UUID.randomUUID().toString().replace("-", "");
         long size = file.getSize();
         File savedFile = fileStoreService.saveFile(file.getInputStream(), contentId, size);
@@ -98,9 +98,6 @@ public class ObjectUploadController {
         }
 
         String sha256sum1 = DigestUtil.sha256sum(savedFile.getAbsolutePath());
-        /*if (!sha256sum.equals(sha256sum1)) {
-            return WebResult.failWithMsg("sha256sum not match");
-        }*/
         ObjectProp objectProp = objectNameService.getObjectProp(channelId);
         String originalFilename = file.getOriginalFilename();
         ObjectResult objectResult = putObjectService.putObject(objectProp, contentId, savedFile, originalFilename, sha256sum1);

+ 4 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/DataBlockMapper.java

@@ -16,9 +16,12 @@ import java.util.List;
 public interface DataBlockMapper extends BaseMapper<DataBlock> {
     @Deprecated
     void updateContentId(@Param("objectId") String objectId, @Param("contentId") String contentId);
+    @Deprecated
     void updateBatch(List<DataBlock> list);
 
+    @Deprecated
     List<DataBlock> findByObjectId(String objectId);
-    List<DataBlock> findDataBlockByPage(Page page);
+    List<DataBlock> findByContentId(String contentId);
+    @Deprecated
     DataBlock findByPath(String absolutePath);
 }

+ 1 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/FileMetaMapper.java

@@ -20,6 +20,7 @@ public interface FileMetaMapper extends BaseMapper<FileMeta> {
     FileMeta findBySha256sum(String sha256sum);
     FileMeta findByObjectName(String objectName);
     FileMeta findByObjectId(String objectId);
+    List<FileMeta> findByContentId(String contentId);
 
     List<FileMeta> findAll0(@Param("bucket") String bucket, @Param("max") Integer max, @Param("regex") String regex);
     List<FileMeta> findAll1(@Param("bucket") String bucket, @Param("prefix") String prefix, @Param("max") Integer max);

+ 9 - 5
dfs-store/src/main/java/cn/reghao/dfs/store/db/repository/ObjectRepository.java

@@ -33,11 +33,6 @@ public class ObjectRepository {
         fileMetaMapper.save(fileMeta);
     }
 
-    //@CachePut
-    public void saveFileMetas(List<FileMeta> list) {
-        fileMetaMapper.saveAll(list);
-    }
-
     @Transactional(rollbackFor = Exception.class)
     public void saveObject(FileMeta fileMeta, List<DataBlock> list) {
         fileMetaMapper.save(fileMeta);
@@ -68,4 +63,13 @@ public class ObjectRepository {
         ObjectMeta objectMeta = fileMetaMapper.findObjectMeta(objectName);
         return objectMeta;
     }
+
+    @CacheEvict(cacheNames = "oss:store:objectMeta", key = "#objectName")
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteObject(String objectName) {
+        FileMeta fileMeta = fileMetaMapper.findByObjectName(objectName);
+        String contentId = fileMeta.getContentId();
+        List<FileMeta> list = fileMetaMapper.findByContentId(contentId);
+        List<DataBlock> list1 = dataBlockMapper.findByContentId(contentId);
+    }
 }

+ 4 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/service/PutObjectService.java

@@ -107,4 +107,8 @@ public class PutObjectService {
         objectRepository.saveFileMeta(fileMeta1);
         return new ObjectResult(toObjectName, toObjectId, fileType, savedPath);
     }
+
+    public void deleteObject(String objectName) {
+        objectRepository.deleteObject(objectName);
+    }
 }

+ 39 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/task/DiskFileProcessor.java

@@ -0,0 +1,39 @@
+package cn.reghao.dfs.store.task;
+
+import cn.reghao.dfs.store.model.vo.ObjectResult;
+import cn.reghao.dfs.store.service.ObjectNameService;
+import cn.reghao.dfs.store.service.PutObjectService;
+import cn.reghao.dfs.store.util.StringUtil;
+import cn.reghao.oss.api.rest.UploadFileRet;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author reghao
+ * @date 2023-07-12 15:45:02
+ */
+@Service
+public class DiskFileProcessor {
+    private final PutObjectService putObjectService;
+    private final ObjectNameService objectNameService;
+
+    public DiskFileProcessor(PutObjectService putObjectService, ObjectNameService objectNameService) {
+        this.putObjectService = putObjectService;
+        this.objectNameService = objectNameService;
+    }
+
+    public UploadFileRet process(ObjectResult objectResult) {
+        String objectName = objectResult.getObjectName();
+        String objectId = objectResult.getObjectId();
+        String url = objectNameService.getObjectUrl(objectName);
+        boolean duplicate = objectResult.isDuplicate();
+        if (duplicate) {
+            String suffix = StringUtil.getSuffix(objectName);
+            ObjectResult objectResult1 = putObjectService.copyObject(objectName, suffix);
+            String objectId1 = objectResult1.getObjectId();
+            String url1 = objectNameService.getObjectUrl(objectResult1.getObjectName());
+            return new UploadFileRet(objectId1, url1);
+        }
+
+        return new UploadFileRet(objectId, url);
+    }
+}

+ 4 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/task/FileProcessor.java

@@ -21,12 +21,14 @@ public class FileProcessor {
     private final ImageFileProcessor imageFileProcessor;
     private final VideoFileProcessor videoFileProcessor;
     private final AudioFileProcessor audioFileProcessor;
+    private DiskFileProcessor diskFileProcessor;
 
     public FileProcessor(ImageFileProcessor imageFileProcessor, VideoFileProcessor videoFileProcessor,
-                         AudioFileProcessor audioFileProcessor) {
+                         AudioFileProcessor audioFileProcessor, DiskFileProcessor diskFileProcessor) {
         this.imageFileProcessor = imageFileProcessor;
         this.videoFileProcessor = videoFileProcessor;
         this.audioFileProcessor = audioFileProcessor;
+        this.diskFileProcessor = diskFileProcessor;
     }
 
     public UploadFileRet process(ObjectResult objectResult, int channelId) {
@@ -38,6 +40,7 @@ public class FileProcessor {
         UploadChannel channel = UploadChannel.getUploadChannel(channelId);
         switch (channel) {
             case disk:
+                uploadFileRet = diskFileProcessor.process(objectResult);
                 break;
             case video:
                 uploadFileRet = videoFileProcessor.process(objectResult);

+ 4 - 5
dfs-store/src/main/resources/mapper/DataBlockMapper.xml

@@ -46,14 +46,13 @@
         select * from data_block
         where object_id=#{objectId}
     </select>
-    <select id="findDataBlockByPage" resultType="cn.reghao.dfs.store.model.po.DataBlock">
-        select data_block.*
+    <select id="findByContentId" resultType="cn.reghao.dfs.store.model.po.DataBlock">
+        select *
         from data_block
-        inner join file_meta
-        on data_block.object_id=file_meta.object_id
+        where content_id=#{contentId}
     </select>
     <select id="findByPath" resultType="cn.reghao.dfs.store.model.po.DataBlock">
         select * from data_block
         where absolute_path=#{absolutePath}
     </select>
-</mapper>
+</mapper>

+ 5 - 0
dfs-store/src/main/resources/mapper/FileMetaMapper.xml

@@ -85,6 +85,11 @@
         from file_meta
         where object_id=#{objectId}
     </select>
+    <select id="findByContentId" resultType="cn.reghao.dfs.store.model.po.FileMeta">
+        select *
+        from file_meta
+        where content_id=#{contentId}
+    </select>
     <select id="findObjectMeta" resultType="cn.reghao.oss.api.dto.ObjectMeta">
         select file_meta.size,file_meta.content_type,file_meta.object_name,file_meta.object_id,
         data_block.absolute_path