reghao 3 tahun lalu
induk
melakukan
74b918b3a9

+ 18 - 7
src/main/java/cn/reghao/dfs/store/oss/controller/BucketController.java

@@ -1,11 +1,15 @@
 package cn.reghao.dfs.store.oss.controller;
 
+import cn.reghao.dfs.store.oss.model.FileMeta;
+import cn.reghao.dfs.store.oss.service.BucketService;
 import cn.reghao.jutil.jdk.result.WebBody;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
  * @author reghao
  * @date 2022-11-21 15:12:11
@@ -14,6 +18,20 @@ import org.springframework.web.bind.annotation.*;
 @RestController
 @RequestMapping("/bucket")
 public class BucketController {
+    private final BucketService bucketService;
+
+    public BucketController(BucketService bucketService) {
+        this.bucketService = bucketService;
+    }
+
+    @ApiOperation("获取存储桶中的部分对象")
+    @GetMapping(value = "/", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String getBucket(@RequestParam("listType") int listType) {
+        // listType = 2
+        List<FileMeta> list = bucketService.list();
+        return WebBody.success(list);
+    }
+
     @ApiOperation(value = "删除指定的存储桶")
     @DeleteMapping(value = "/", produces = MediaType.APPLICATION_JSON_VALUE)
     public String deleteBucket() {
@@ -74,13 +92,6 @@ public class BucketController {
         return WebBody.success();
     }
 
-    @ApiOperation("获取存储桶中的部分对象")
-    @GetMapping(value = "/", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String getBucket(@RequestParam("listType") int listType) {
-        // listType = 2
-        return WebBody.success();
-    }
-
     @ApiOperation("获取存储桶的 cors 配置")
     @GetMapping(value = "/", params = {"cors"}, produces = MediaType.APPLICATION_JSON_VALUE)
     public String getBucketCors() {

+ 15 - 12
src/main/java/cn/reghao/dfs/store/oss/controller/ObjectController.java

@@ -1,23 +1,18 @@
 package cn.reghao.dfs.store.oss.controller;
 
-import cn.reghao.dfs.store.oss.model.FileMeta;
 import cn.reghao.dfs.store.oss.model.object.DeleteObjects;
-import cn.reghao.dfs.store.oss.service.ObjectService;
 import cn.reghao.dfs.store.oss.service.ObjectServiceImpl;
 import cn.reghao.jutil.jdk.result.WebBody;
+import cn.reghao.jutil.web.ServletUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.rocksdb.RocksDBException;
-import org.springframework.core.io.InputStreamResource;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.net.URLDecoder;
+import java.nio.charset.StandardCharsets;
 
 /**
  * @author reghao
@@ -34,8 +29,12 @@ public class ObjectController {
     }
 
     @ApiOperation("上传对象")
-    @PutMapping(value = "/{objectName:.+}")
-    public String putObject(@PathVariable("objectName") String objectName, MultipartFile file) throws Exception {
+    @PutMapping(value = "/**")
+    public String putObject(MultipartFile file) throws Exception {
+        String uri = ServletUtil.getRequest().getRequestURI();
+        String uri1 = URLDecoder.decode(uri, StandardCharsets.UTF_8);
+
+        String objectName = uri1.replace("/object", "");
         objectService.putObject(objectName, file);
         return WebBody.success();
     }
@@ -89,8 +88,12 @@ public class ObjectController {
     }
 
     @ApiOperation("获取对象")
-    @GetMapping(value = "/{objectName:.+}")
-    public void getObject(@PathVariable("objectName") String objectName) throws RocksDBException, IOException {
+    @GetMapping(value = "/**")
+    public void getObject() throws RocksDBException, IOException {
+        String uri = ServletUtil.getRequest().getRequestURI();
+        String uri1 = URLDecoder.decode(uri, StandardCharsets.UTF_8);
+
+        String objectName = uri1.replace("/object", "");
         objectService.getObject(objectName);
     }
 

+ 2 - 0
src/main/java/cn/reghao/dfs/store/oss/db/mapper/DataBlockMapper.java

@@ -3,6 +3,7 @@ package cn.reghao.dfs.store.oss.db.mapper;
 import cn.reghao.dfs.store.oss.model.DataBlock;
 import cn.reghao.jutil.jdk.db.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -12,5 +13,6 @@ import java.util.List;
  */
 @Mapper
 public interface DataBlockMapper extends BaseMapper<DataBlock> {
+    void update(@Param("objectId") String objectId, @Param("absolutePath") String absolutePath);
     List<DataBlock> findByObjectId(String objectId);
 }

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

@@ -3,6 +3,7 @@ package cn.reghao.dfs.store.oss.db.mapper;
 import cn.reghao.dfs.store.oss.model.FileMeta;
 import cn.reghao.jutil.jdk.db.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * @author reghao
@@ -10,6 +11,8 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface FileMetaMapper extends BaseMapper<FileMeta> {
+    void update(@Param("objectId") String objectId, @Param("objectName") String objectName);
+
     FileMeta findBySha256sum(String sha256sum);
     FileMeta findByObjectName(String objectName);
 }

+ 25 - 0
src/main/java/cn/reghao/dfs/store/oss/service/BucketService.java

@@ -0,0 +1,25 @@
+package cn.reghao.dfs.store.oss.service;
+
+import cn.reghao.dfs.store.oss.db.mapper.FileMetaMapper;
+import cn.reghao.dfs.store.oss.model.FileMeta;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2022-12-07 16:02:22
+ */
+@Service
+public class BucketService {
+    private final FileMetaMapper fileMetaMapper;
+
+    public BucketService(FileMetaMapper fileMetaMapper) {
+        this.fileMetaMapper = fileMetaMapper;
+    }
+
+    public List<FileMeta> list() {
+        List<FileMeta> list = fileMetaMapper.findAll();
+        return list;
+    }
+}

+ 1 - 1
src/main/resources/application-dev-dev.yml

@@ -8,6 +8,6 @@ dfs:
   group: 0
   node: 0
   baseDirs:
-    - /opt/oss/file/c42796cb-496e-4621-8e11-cb080bdd474d/
+    - /opt/oss/disk/c42796cb-496e-4621-8e11-cb080bdd474d/
   encryptKey: 5JCdi68CulSDu0TqD4jR
   metaDir: /opt/oss/meta

+ 0 - 13
src/main/resources/application-dev-test.yml

@@ -1,13 +0,0 @@
-spring:
-  datasource:
-    url: jdbc:mysql://192.168.0.110:3306/reghao_oss_tdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
-    username: test
-    password: Test@123456
-dfs:
-  domain: file.reghao.cn
-  group: 0
-  node: 0
-  baseDirs:
-    - /opt/oss/file/c42796cb-496e-4621-8e11-cb080bdd474d/
-  encryptKey: 5JCdi68CulSDu0TqD4jR
-  metaDir: /opt/oss/meta

+ 1 - 4
src/main/resources/application-test.yml

@@ -8,9 +8,6 @@ dfs:
   group: 0
   node: 0
   baseDirs:
-    - /opt/file/13f654c8-af87-4710-aac9-7aa086c99aec/
-    - /opt/file/7c43343d-c1e2-4e68-bc18-89bd3f61b0c8/
-    - /opt/file/1c87f931-a2fc-45e6-a593-c5d18111d545/
-    - /opt/file/f6f1159b-4654-4956-adb2-992d46461976/
+    - /opt/oss/disk/13f654c8-af87-4710-aac9-7aa086c99aec/
   encryptKey: 5JCdi68CulSDu0TqD4jR
   metaDir: /opt/oss/meta

+ 10 - 1
src/main/resources/mapper/oss/DataBlockMapper.xml

@@ -17,8 +17,17 @@
         </foreach>
     </insert>
 
+    <update id="update">
+        update data_block
+        set absolute_path=#{absolutePath}
+        where object_id=#{objectId}
+    </update>
+
+    <select id="findAll" resultType="cn.reghao.dfs.store.oss.model.DataBlock">
+        select * from data_block
+    </select>
     <select id="findByObjectId" resultType="cn.reghao.dfs.store.oss.model.DataBlock">
         select * from data_block
         where object_id=#{objectId}
     </select>
-</mapper>
+</mapper>

+ 9 - 0
src/main/resources/mapper/oss/FileMetaMapper.xml

@@ -9,6 +9,15 @@
         (#{id},#{deleted},#{createTime},#{updateTime},#{objectName},#{objectId},#{size},#{contentType},#{sha256sum})
     </insert>
 
+    <update id="update">
+        update data_block
+        set object_name=#{object_name}
+        where object_id=#{objectId}
+    </update>
+
+    <select id="findAll" resultType="cn.reghao.dfs.store.oss.model.FileMeta">
+        select * from file_meta
+    </select>
     <select id="findBySha256sum" resultType="cn.reghao.dfs.store.oss.model.FileMeta">
         select * from file_meta
         where sha256sum=#{sha256sum}

+ 22 - 0
src/test/java/VideoFileTest.java

@@ -3,6 +3,8 @@ import cn.reghao.dfs.store.model.constant.VideoUrlType;
 import cn.reghao.dfs.store.model.dto.UploadingFile;
 import cn.reghao.dfs.store.model.po.*;
 import cn.reghao.dfs.store.model.dto.UploadedFile;
+import cn.reghao.dfs.store.oss.db.mapper.DataBlockMapper;
+import cn.reghao.dfs.store.oss.model.DataBlock;
 import cn.reghao.dfs.store.service.FileUploadService;
 import cn.reghao.dfs.store.service.media.MediaQuality;
 import cn.reghao.dfs.store.service.media.MediaResolution;
@@ -16,6 +18,7 @@ import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.io.*;
+import java.util.List;
 
 /**
  * @author reghao
@@ -64,4 +67,23 @@ public class VideoFileTest {
                 mediaResolution.getQuality(), "");
         //videoUrlMapper.save(videoUrl);
     }
+
+    @Autowired
+    DataBlockMapper dataBlockMapper;
+    @Test
+    public void test() {
+        List<DataBlock> list = dataBlockMapper.findAll();
+        list.forEach(dataBlock -> {
+            String objectId = dataBlock.getObjectId();
+            String absolute = dataBlock.getAbsolutePath();
+            String absolute1 = absolute.replace("c42796cb-496e-4621-8e11-cb080bdd474d",
+                    "13f654c8-af87-4710-aac9-7aa086c99aec");
+            File file = new File(absolute1);
+            if (file.exists()) {
+                dataBlockMapper.update(objectId, absolute1);
+            } else {
+                log.error("{} not exist", absolute1);
+            }
+        });
+    }
 }