reghao 3 lat temu
rodzic
commit
25f38addd6
100 zmienionych plików z 883 dodań i 1736 usunięć
  1. 6 0
      dfs-api/pom.xml
  2. 0 25
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/BucketInfo.java
  3. 0 25
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/BucketListResult.java
  4. 0 20
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/BucketRegion.java
  5. 0 34
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/CreateBucket.java
  6. 0 27
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/CreateFolder.java
  7. 28 0
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/DeleteFile.java
  8. 6 5
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/DirProp.java
  9. 8 4
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/FileInfoVO.java
  10. 23 0
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/FileProp.java
  11. 0 29
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/GetObjects.java
  12. 0 24
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/GetObjectsResult.java
  13. 0 23
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/HeadObjectResult.java
  14. 15 0
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/ImageFileRet.java
  15. 5 5
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/ImageUrl.java
  16. 0 19
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/KeyValue.java
  17. 0 28
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/ObjectJson.java
  18. 0 19
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/Owner.java
  19. 35 0
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/VideoInfo.java
  20. 6 31
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/VideoUrlDto.java
  21. 11 0
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/VideoUrlType.java
  22. 0 25
      dfs-api/src/main/java/cn/reghao/dfs/api/dto/object/GenerateSignedUrl.java
  23. 0 18
      dfs-api/src/main/java/cn/reghao/dfs/api/iface/BucketService.java
  24. 31 0
      dfs-api/src/main/java/cn/reghao/dfs/api/iface/FileService.java
  25. 11 0
      dfs-api/src/main/java/cn/reghao/dfs/api/iface/ImageFileService.java
  26. 0 19
      dfs-api/src/main/java/cn/reghao/dfs/api/iface/ObjectService.java
  27. 0 13
      dfs-api/src/main/java/cn/reghao/dfs/api/iface/RegionService.java
  28. 15 0
      dfs-api/src/main/java/cn/reghao/dfs/api/iface/VideoFileService.java
  29. 23 13
      dfs-store/pom.xml
  30. 36 0
      dfs-store/src/main/java/cn/reghao/dfs/store/cache/CacheConfig.java
  31. 3 3
      dfs-store/src/main/java/cn/reghao/dfs/store/cache/LocalCache.java
  32. 2 2
      dfs-store/src/main/java/cn/reghao/dfs/store/config/OssProperties.java
  33. 3 2
      dfs-store/src/main/java/cn/reghao/dfs/store/config/PutMessageConverter.java
  34. 0 43
      dfs-store/src/main/java/cn/reghao/dfs/store/config/SwaggerConfig.java
  35. 9 23
      dfs-store/src/main/java/cn/reghao/dfs/store/config/WebConfig.java
  36. 0 81
      dfs-store/src/main/java/cn/reghao/dfs/store/controller/BucketBasicController.java
  37. 0 201
      dfs-store/src/main/java/cn/reghao/dfs/store/controller/BucketController.java
  38. 0 11
      dfs-store/src/main/java/cn/reghao/dfs/store/controller/MultipartUploadController.java
  39. 0 56
      dfs-store/src/main/java/cn/reghao/dfs/store/controller/ObjectController.java
  40. 44 0
      dfs-store/src/main/java/cn/reghao/dfs/store/controller/ObjectGetController.java
  41. 2 23
      dfs-store/src/main/java/cn/reghao/dfs/store/controller/ObjectMultipartUploadController.java
  42. 16 65
      dfs-store/src/main/java/cn/reghao/dfs/store/controller/ObjectUploadController.java
  43. 0 27
      dfs-store/src/main/java/cn/reghao/dfs/store/controller/ServiceController.java
  44. 0 21
      dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/BucketMapper.java
  45. 0 14
      dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/FileContentMapper.java
  46. 26 4
      dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/FileMetaMapper.java
  47. 0 4
      dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/FileTypeMapper.java
  48. 16 0
      dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/ImageFileMapper.java
  49. 0 19
      dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/RegionMapper.java
  50. 13 0
      dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/VideoFileMapper.java
  51. 18 0
      dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/VideoUrlMapper.java
  52. 83 0
      dfs-store/src/main/java/cn/reghao/dfs/store/inerceptor/AccessLogInterceptor.java
  53. 0 50
      dfs-store/src/main/java/cn/reghao/dfs/store/inerceptor/FileAccessInterceptor.java
  54. 5 10
      dfs-store/src/main/java/cn/reghao/dfs/store/inerceptor/JwtTokenFilter.java
  55. 9 0
      dfs-store/src/main/java/cn/reghao/dfs/store/model/constant/ObjectACL.java
  56. 1 1
      dfs-store/src/main/java/cn/reghao/dfs/store/model/dto/ContentRange.java
  57. 0 11
      dfs-store/src/main/java/cn/reghao/dfs/store/model/dto/DeleteObjects.java
  58. 0 16
      dfs-store/src/main/java/cn/reghao/dfs/store/model/dto/FileContentType.java
  59. 0 29
      dfs-store/src/main/java/cn/reghao/dfs/store/model/dto/GetBucket.java
  60. 4 2
      dfs-store/src/main/java/cn/reghao/dfs/store/model/dto/PostObject.java
  61. 0 18
      dfs-store/src/main/java/cn/reghao/dfs/store/model/po/Bucket.java
  62. 0 15
      dfs-store/src/main/java/cn/reghao/dfs/store/model/po/ContentRange.java
  63. 5 5
      dfs-store/src/main/java/cn/reghao/dfs/store/model/po/DataBlock.java
  64. 0 20
      dfs-store/src/main/java/cn/reghao/dfs/store/model/po/FileContent.java
  65. 35 19
      dfs-store/src/main/java/cn/reghao/dfs/store/model/po/FileMeta.java
  66. 34 0
      dfs-store/src/main/java/cn/reghao/dfs/store/model/po/ImageFile.java
  67. 0 18
      dfs-store/src/main/java/cn/reghao/dfs/store/model/po/Region.java
  68. 45 0
      dfs-store/src/main/java/cn/reghao/dfs/store/model/po/VideoFile.java
  69. 38 0
      dfs-store/src/main/java/cn/reghao/dfs/store/model/po/VideoUrl.java
  70. 0 11
      dfs-store/src/main/java/cn/reghao/dfs/store/model/po/bucket/CorsConfiguration.java
  71. 0 13
      dfs-store/src/main/java/cn/reghao/dfs/store/model/po/bucket/CorsRule.java
  72. 0 9
      dfs-store/src/main/java/cn/reghao/dfs/store/model/po/bucket/Expiration.java
  73. 0 9
      dfs-store/src/main/java/cn/reghao/dfs/store/model/po/bucket/Filter.java
  74. 0 11
      dfs-store/src/main/java/cn/reghao/dfs/store/model/po/bucket/LifecycleConfiguration.java
  75. 0 13
      dfs-store/src/main/java/cn/reghao/dfs/store/model/po/bucket/Rule.java
  76. 0 10
      dfs-store/src/main/java/cn/reghao/dfs/store/model/po/bucket/Transition.java
  77. 1 1
      dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/CompleteMultipartUpload.java
  78. 1 1
      dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/CompleteMultipartUploadResult.java
  79. 1 1
      dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/Contents.java
  80. 1 1
      dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/InitiateMultipartUploadResult.java
  81. 1 1
      dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/Initiator.java
  82. 1 1
      dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/ListPartsResult.java
  83. 1 1
      dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/Owner.java
  84. 1 1
      dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/Part.java
  85. 1 1
      dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/PostResponse.java
  86. 0 15
      dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/Delete.java
  87. 0 12
      dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/DeleteResult.java
  88. 0 9
      dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/Deleted.java
  89. 0 11
      dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/Error.java
  90. 0 44
      dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/ListBucketResult.java
  91. 0 9
      dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/Object.java
  92. 0 12
      dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/service/Bucket.java
  93. 0 14
      dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/service/ListAllMyBucketsResult.java
  94. 0 71
      dfs-store/src/main/java/cn/reghao/dfs/store/rpc/BucketServiceImpl.java
  95. 175 0
      dfs-store/src/main/java/cn/reghao/dfs/store/rpc/FileServiceImpl.java
  96. 0 147
      dfs-store/src/main/java/cn/reghao/dfs/store/rpc/ObjectServiceImpl.java
  97. 26 0
      dfs-store/src/main/java/cn/reghao/dfs/store/rpc/OssServiceImpl.java
  98. 0 28
      dfs-store/src/main/java/cn/reghao/dfs/store/rpc/RegionServiceImpl.java
  99. 0 50
      dfs-store/src/main/java/cn/reghao/dfs/store/service/BucketService.java
  100. 3 10
      dfs-store/src/main/java/cn/reghao/dfs/store/service/FileUrlService.java

+ 6 - 0
dfs-api/pom.xml

@@ -14,6 +14,12 @@
     </properties>
 
     <dependencies>
+        <dependency>
+            <groupId>cn.reghao.jutil</groupId>
+            <artifactId>jdk</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>

+ 0 - 25
dfs-api/src/main/java/cn/reghao/dfs/api/dto/BucketInfo.java

@@ -1,25 +0,0 @@
-package cn.reghao.dfs.api.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2023-01-05 16:37:57
- */
-@Getter
-@Setter
-public class BucketInfo implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private String region;
-    private String location;
-    private String name;
-    private String storageClass;
-    private Long creationDate;
-    private String extranetEndpoint;
-    private String intranetEndpoint;
-    private Owner owner;
-}

+ 0 - 25
dfs-api/src/main/java/cn/reghao/dfs/api/dto/BucketListResult.java

@@ -1,25 +0,0 @@
-package cn.reghao.dfs.api.dto;
-
-import cn.reghao.dfs.api.dto.BucketInfo;
-import lombok.Getter;
-
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2023-01-05 16:37:43
- */
-@Getter
-public class BucketListResult implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private List<BucketInfo> buckets;
-    private List<Object> failedRegions;
-
-    public BucketListResult(List<BucketInfo> buckets) {
-        this.buckets = buckets;
-        this.failedRegions = Collections.emptyList();
-    }
-}

+ 0 - 20
dfs-api/src/main/java/cn/reghao/dfs/api/dto/BucketRegion.java

@@ -1,20 +0,0 @@
-package cn.reghao.dfs.api.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2023-01-06 10:53:32
- */
-@Setter
-@Getter
-public class BucketRegion implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private String bucket;
-    private String region;
-    private String regionName;
-}

+ 0 - 34
dfs-api/src/main/java/cn/reghao/dfs/api/dto/CreateBucket.java

@@ -1,34 +0,0 @@
-package cn.reghao.dfs.api.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import javax.validation.constraints.NotBlank;
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2023-01-05 09:09:52
- */
-@Setter
-@Getter
-public class CreateBucket implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private String umid;
-    private String token;
-    private String secToken;
-    private String collina;
-    private String region;
-    @NotBlank
-    private String bucket;
-    private String storage;
-    private String acl;
-    private String dataRedundancyType;
-    private Boolean openSls;
-    private String algorithm;
-    private Boolean openHbr;
-    private String keyId;
-    private String kmsEncryptionAlgorithm;
-    private String resourceGroupId;
-}

+ 0 - 27
dfs-api/src/main/java/cn/reghao/dfs/api/dto/CreateFolder.java

@@ -1,27 +0,0 @@
-package cn.reghao.dfs.api.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import javax.validation.constraints.NotBlank;
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2023-01-03 10:47:19
- */
-@Setter
-@Getter
-public class CreateFolder implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private String umid;
-    private String token;
-    private String secToken;
-    private String collina;
-    private String region;
-    private String bucket;
-    @NotBlank
-    //@Pattern(regexp = "")
-    private String objectName;
-}

+ 28 - 0
dfs-api/src/main/java/cn/reghao/dfs/api/dto/DeleteFile.java

@@ -0,0 +1,28 @@
+package cn.reghao.dfs.api.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * @author reghao
+ * @date 2023-05-15 17:06:54
+ */
+@Setter
+@Getter
+public class DeleteFile implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String fileId;
+    private String filename;
+    private int type;
+    private String icon;
+    private long size;
+    private String updateTime;
+    private int leftDays;
+
+    public DeleteFile() {
+        this.leftDays = 10;
+    }
+}

+ 6 - 5
dfs-api/src/main/java/cn/reghao/dfs/api/dto/object/GenerateSignedUrlResult.java → dfs-api/src/main/java/cn/reghao/dfs/api/dto/DirProp.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.api.dto.object;
+package cn.reghao.dfs.api.dto;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;
@@ -7,13 +7,14 @@ import java.io.Serializable;
 
 /**
  * @author reghao
- * @date 2023-01-03 10:47:19
+ * @date 2023-05-19 11:36:50
  */
 @AllArgsConstructor
 @Getter
-public class GenerateSignedUrlResult implements Serializable {
+public class DirProp implements Serializable {
     private static final long serialVersionUID = 1L;
 
-    private String url;
-    private String signature;
+    private long totalSubDirs;
+    private long totalFiles;
+    private long totalSize;
 }

+ 8 - 4
dfs-api/src/main/java/cn/reghao/dfs/api/dto/FileIcon.java → dfs-api/src/main/java/cn/reghao/dfs/api/dto/FileInfoVO.java

@@ -7,14 +7,18 @@ import java.io.Serializable;
 
 /**
  * @author reghao
- * @date 2023-01-03 14:30:46
+ * @date 2023-05-15 17:06:54
  */
 @Setter
 @Getter
-public class FileIcon implements Serializable {
+@Deprecated
+public class FileInfoVO implements Serializable {
     private static final long serialVersionUID = 1L;
 
-    private Integer id;
+    private String fileId;
+    private String filename;
+    private int type;
     private String icon;
-    private String iconLarge;
+    private long size;
+    private String updateTime;
 }

+ 23 - 0
dfs-api/src/main/java/cn/reghao/dfs/api/dto/FileProp.java

@@ -0,0 +1,23 @@
+package cn.reghao.dfs.api.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.io.Serializable;
+
+/**
+ * @author reghao
+ * @date 2023-05-19 10:46:23
+ */
+@AllArgsConstructor
+@Getter
+public class FileProp implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String path;
+    private String filename;
+    private Long size;
+    private String contentType;
+    private String sha256sum;
+    private String url;
+}

+ 0 - 29
dfs-api/src/main/java/cn/reghao/dfs/api/dto/GetObjects.java

@@ -1,29 +0,0 @@
-package cn.reghao.dfs.api.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2023-01-03 10:06:08
- */
-@Setter
-@Getter
-public class GetObjects implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    @NotBlank
-    private String bucket;
-    private String region;
-    @NotNull
-    private String prefix;
-    private String marker;
-    @NotNull
-    private Integer maxKeys;
-    private String delimiter;
-    private Boolean logInfo;
-}

+ 0 - 24
dfs-api/src/main/java/cn/reghao/dfs/api/dto/GetObjectsResult.java

@@ -1,24 +0,0 @@
-package cn.reghao.dfs.api.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2023-01-02 17:48:44
- */
-@Setter
-@Getter
-public class GetObjectsResult implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private String bucketName;
-    private String delimiter;
-    private Integer maxKeys;
-    private Long objectSize;
-    private Boolean truncated;
-    private List<ObjectJson> objectList;
-}

+ 0 - 23
dfs-api/src/main/java/cn/reghao/dfs/api/dto/HeadObjectResult.java

@@ -1,23 +0,0 @@
-package cn.reghao.dfs.api.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2023-01-03 10:42:33
- */
-@Setter
-@Getter
-public class HeadObjectResult implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private String contentType;
-    private Long contentLength;
-    private String eTag;
-    private Long lastModified;
-    private String storageClass;
-    private String userMeta;
-}

+ 15 - 0
dfs-api/src/main/java/cn/reghao/dfs/api/dto/ImageFileRet.java

@@ -0,0 +1,15 @@
+package cn.reghao.dfs.api.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author reghao
+ * @date 2022-08-05 18:06:08
+ */
+@AllArgsConstructor
+@Getter
+public class ImageFileRet {
+    private String imageFileId;
+    private String imageUrl;
+}

+ 5 - 5
dfs-api/src/main/java/cn/reghao/dfs/api/dto/HeadObject.java → dfs-api/src/main/java/cn/reghao/dfs/api/dto/ImageUrl.java

@@ -7,14 +7,14 @@ import java.io.Serializable;
 
 /**
  * @author reghao
- * @date 2023-01-03 10:42:33
+ * @date 2023-01-12 14:42:50
  */
 @Setter
 @Getter
-public class HeadObject implements Serializable {
+public class ImageUrl implements Serializable {
     private static final long serialVersionUID = 1L;
 
-    private String bucket;
-    private String region;
-    private String objectName;
+    private String originalUrl;
+    private String webpUrl;
+    private String thumbnailUrl;
 }

+ 0 - 19
dfs-api/src/main/java/cn/reghao/dfs/api/dto/KeyValue.java

@@ -1,19 +0,0 @@
-package cn.reghao.dfs.api.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2023-01-05 14:15:39
- */
-@Setter
-@Getter
-public class KeyValue implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private String key;
-    private String value;
-}

+ 0 - 28
dfs-api/src/main/java/cn/reghao/dfs/api/dto/ObjectJson.java

@@ -1,28 +0,0 @@
-package cn.reghao.dfs.api.dto;
-
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2023-01-02 17:50:10
- */
-@NoArgsConstructor
-@Setter
-@Getter
-public class ObjectJson implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private Boolean dir;
-    private String name;
-    private String path;
-    private Long size;
-    private String formattedSize;
-    private String objectType;
-    private Integer type;
-    private String storageClass;
-    private long timeModified;
-}

+ 0 - 19
dfs-api/src/main/java/cn/reghao/dfs/api/dto/Owner.java

@@ -1,19 +0,0 @@
-package cn.reghao.dfs.api.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2023-01-05 16:37:03
- */
-@Getter
-@Setter
-public class Owner implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private String id;
-    private String displayName;
-}

+ 35 - 0
dfs-api/src/main/java/cn/reghao/dfs/api/dto/VideoInfo.java

@@ -0,0 +1,35 @@
+package cn.reghao.dfs.api.dto;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * @author reghao
+ * @date 2023-01-11 10:41:53
+ */
+@NoArgsConstructor
+@Setter
+@Getter
+public class VideoInfo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String videoId;
+    private String videoObjectName;
+    // 单位秒
+    private Integer duration;
+    private Integer width;
+    private Integer height;
+    private Boolean horizontal;
+
+    public VideoInfo(String videoId, String videoObjectName, Integer duration, Integer width, Integer height) {
+        this.videoId = videoId;
+        this.videoObjectName = videoObjectName;
+        this.duration = duration;
+        this.width = width;
+        this.height = height;
+        this.horizontal = width > height;
+    }
+}

+ 6 - 31
dfs-api/src/main/java/cn/reghao/dfs/api/dto/VideoUrlDto.java

@@ -1,47 +1,22 @@
 package cn.reghao.dfs.api.dto;
 
+import lombok.Getter;
+import lombok.Setter;
+
 import java.io.Serializable;
 
 /**
  * @author reghao
- * @date 2022-08-05 15:13:40
+ * @date 2023-01-10 09:51:53
  */
-@Deprecated
+@Getter
+@Setter
 public class VideoUrlDto implements Serializable {
     private static final long serialVersionUID = 1L;
 
     private String type;
     private String url;
-    private String path;
     private int width;
     private int height;
     private String quality;
-
-    public String getType() {
-        return type;
-    }
-
-    public String getUrl() {
-        return url;
-    }
-
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    public String getPath() {
-        return path;
-    }
-
-    public int getWidth() {
-        return width;
-    }
-
-    public int getHeight() {
-        return height;
-    }
-
-    public String getQuality() {
-        return quality;
-    }
 }

+ 11 - 0
dfs-api/src/main/java/cn/reghao/dfs/api/dto/VideoUrlType.java

@@ -0,0 +1,11 @@
+package cn.reghao.dfs.api.dto;
+
+/**
+ * 视频 URL 类型
+ *
+ * @author reghao
+ * @date 2021-12-28 15:49:19
+ */
+public enum VideoUrlType {
+    mp4, hls, dash, flv
+}

+ 0 - 25
dfs-api/src/main/java/cn/reghao/dfs/api/dto/object/GenerateSignedUrl.java

@@ -1,25 +0,0 @@
-package cn.reghao.dfs.api.dto.object;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2023-01-03 10:47:19
- */
-@Setter
-@Getter
-public class GenerateSignedUrl implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private String umid;
-    private String token;
-    private String secToken;
-    private String collina;
-    private String region;
-    private String bucket;
-    private String objectName;
-    private Integer timeout;
-}

+ 0 - 18
dfs-api/src/main/java/cn/reghao/dfs/api/iface/BucketService.java

@@ -1,18 +0,0 @@
-package cn.reghao.dfs.api.iface;
-
-import cn.reghao.dfs.api.dto.BucketListResult;
-import cn.reghao.dfs.api.dto.BucketRegion;
-import cn.reghao.dfs.api.dto.CreateBucket;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2022-08-05 15:23:51
- */
-public interface BucketService {
-    boolean exist(String region, String bucketName);
-    void create(CreateBucket createBucket);
-    BucketListResult list();
-    List<BucketRegion> getBucketRegions();
-}

+ 31 - 0
dfs-api/src/main/java/cn/reghao/dfs/api/iface/FileService.java

@@ -0,0 +1,31 @@
+package cn.reghao.dfs.api.iface;
+
+import cn.reghao.dfs.api.dto.DeleteFile;
+import cn.reghao.dfs.api.dto.DirProp;
+import cn.reghao.dfs.api.dto.FileInfoVO;
+import cn.reghao.dfs.api.dto.FileProp;
+import cn.reghao.jutil.jdk.db.PageList;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2023-05-18 19:23:07
+ */
+public interface FileService {
+    PageList<FileInfoVO> getFileList(String pid, int pageNumber);
+    PageList<FileInfoVO> getFileCard(String pid, int pageNumber);
+    List<FileInfoVO> getDirectories(String pid);
+    PageList<DeleteFile> getTrashList(int pageNumber, int pageSize);
+
+    String checkFilename(String pid, String filename);
+    void createDirectory(String pid, String filename);
+    String createFile(String pid, String filename, String content);
+    void copyFile(List<String> fileIds, String toPid);
+    void moveFile(List<String> fileIds, String toPid);
+    void renameFile(String fileId, String newFilename);
+    void deleteFiles(List<String> fileIds);
+    FileProp getFileProp(String fileId);
+    DirProp getDirProp(String fileId);
+    PageList<FileInfoVO> search(String keyword, int pageNumber);
+}

+ 11 - 0
dfs-api/src/main/java/cn/reghao/dfs/api/iface/ImageFileService.java

@@ -0,0 +1,11 @@
+package cn.reghao.dfs.api.iface;
+
+import cn.reghao.dfs.api.dto.ImageUrl;
+
+/**
+ * @author reghao
+ * @date 2023-01-10 13:46:21
+ */
+public interface ImageFileService {
+    ImageUrl getImageUrl(String imageFileId);
+}

+ 0 - 19
dfs-api/src/main/java/cn/reghao/dfs/api/iface/ObjectService.java

@@ -1,19 +0,0 @@
-package cn.reghao.dfs.api.iface;
-
-import cn.reghao.dfs.api.dto.*;
-import cn.reghao.dfs.api.dto.object.GenerateSignedUrl;
-import cn.reghao.dfs.api.dto.object.GenerateSignedUrlResult;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2023-01-09 15:35:15
- */
-public interface ObjectService {
-    List<FileIcon> getFileIcons();
-    GetObjectsResult list(GetObjects getObjects);
-    void createFolder(CreateFolder createFolder);
-    HeadObjectResult head(HeadObject headObject);
-    GenerateSignedUrlResult getSignedUrl(GenerateSignedUrl generateSignedUrl);
-}

+ 0 - 13
dfs-api/src/main/java/cn/reghao/dfs/api/iface/RegionService.java

@@ -1,13 +0,0 @@
-package cn.reghao.dfs.api.iface;
-
-import cn.reghao.dfs.api.dto.KeyValue;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2023-01-09 16:06:53
- */
-public interface RegionService {
-    List<KeyValue> list();
-}

+ 15 - 0
dfs-api/src/main/java/cn/reghao/dfs/api/iface/VideoFileService.java

@@ -0,0 +1,15 @@
+package cn.reghao.dfs.api.iface;
+
+import cn.reghao.dfs.api.dto.VideoInfo;
+import cn.reghao.dfs.api.dto.VideoUrlDto;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2023-01-10 13:46:11
+ */
+public interface VideoFileService {
+    void setVideoInfo(VideoInfo videoInfo);
+    List<VideoUrlDto> getVideoUrls(String videoFileId, String urlType);
+}

+ 23 - 13
dfs-store/pom.xml

@@ -36,19 +36,31 @@
             <artifactId>tool</artifactId>
             <version>1.0.0-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>cn.reghao.jutil</groupId>
+            <artifactId>media</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
         <dependency>
             <groupId>cn.reghao.jutil</groupId>
             <artifactId>web</artifactId>
             <version>1.0.0-SNAPSHOT</version>
         </dependency>
+
+        <dependency>
+            <groupId>cn.reghao.oss</groupId>
+            <artifactId>oss-common</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+
         <dependency>
             <groupId>cn.reghao.dfs</groupId>
             <artifactId>dfs-api</artifactId>
             <version>1.0.0-SNAPSHOT</version>
         </dependency>
         <dependency>
-            <groupId>cn.reghao.oss</groupId>
-            <artifactId>oss-common</artifactId>
+            <groupId>cn.reghao.tnb.account</groupId>
+            <artifactId>account-api</artifactId>
             <version>1.0.0-SNAPSHOT</version>
         </dependency>
 
@@ -88,6 +100,15 @@
             <artifactId>spring-boot-starter-data-redis</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-cache</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.github.ben-manes.caffeine</groupId>
+            <artifactId>caffeine</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.mybatis.spring.boot</groupId>
             <artifactId>mybatis-spring-boot-starter</artifactId>
@@ -110,17 +131,6 @@
             <version>31.1-jre</version>
         </dependency>
 
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-            <version>2.9.2</version>
-        </dependency>
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>2.9.2</version>
-        </dependency>
-
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-spring-boot-starter</artifactId>

+ 36 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/cache/CacheConfig.java

@@ -0,0 +1,36 @@
+package cn.reghao.dfs.store.cache;
+
+import com.github.benmanes.caffeine.cache.*;
+import org.springframework.cache.CacheManager;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.cache.caffeine.CaffeineCacheManager;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 缓存配置
+ *
+ * @author reghao
+ * @date 2020-03-06 10:58:04
+ */
+@EnableCaching
+@Configuration
+public class CacheConfig {
+    @Bean(name = "caffeineCacheManager")
+    public CacheManager cacheManager() {
+        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
+        Caffeine<Object, Object> caffeineCache = caffeineCache();
+        cacheManager.setCaffeine(caffeineCache);
+        return cacheManager;
+    }
+
+    @Bean("caffeineCache")
+    public Caffeine<Object, Object> caffeineCache() {
+        return Caffeine.newBuilder()
+                .initialCapacity(1000)
+                .maximumSize(10_000)
+                .expireAfterAccess(365, TimeUnit.DAYS);
+    }
+}

+ 3 - 3
dfs-store/src/main/java/cn/reghao/dfs/store/cache/LocalCache.java

@@ -1,6 +1,6 @@
 package cn.reghao.dfs.store.cache;
 
-import cn.reghao.dfs.store.config.DfsProperties;
+import cn.reghao.dfs.store.config.OssProperties;
 import cn.reghao.jutil.jdk.thread.ThreadPoolWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -22,8 +22,8 @@ public class LocalCache {
     private final Map<String, String> cacheMap;
     private final ExecutorService threadPool = ThreadPoolWrapper.threadPool("cache-poll", 10);
 
-    public LocalCache(DfsProperties dfsProperties) {
-        this.cacheDir = dfsProperties.getCacheDir();
+    public LocalCache(OssProperties ossProperties) {
+        this.cacheDir = ossProperties.getCacheDir();
         this.cacheMap = new HashMap<>();
         init(cacheDir);
     }

+ 2 - 2
dfs-store/src/main/java/cn/reghao/dfs/store/config/DfsProperties.java → dfs-store/src/main/java/cn/reghao/dfs/store/config/OssProperties.java

@@ -14,8 +14,8 @@ import java.util.List;
 @Getter
 @Setter
 @Component
-@ConfigurationProperties(prefix = "dfs")
-public class DfsProperties {
+@ConfigurationProperties(prefix = "oss")
+public class OssProperties {
     private String domain;
     private int group;
     private int node;

+ 3 - 2
dfs-store/src/main/java/cn/reghao/dfs/store/config/FileMessageConverter.java → dfs-store/src/main/java/cn/reghao/dfs/store/config/PutMessageConverter.java

@@ -17,8 +17,8 @@ import java.util.UUID;
  * @date 2022-12-28 10:03:22
  */
 @Slf4j
-public class FileMessageConverter extends AbstractHttpMessageConverter<File> {
-    public FileMessageConverter() {
+public class PutMessageConverter extends AbstractHttpMessageConverter<File> {
+    public PutMessageConverter() {
         super(MediaType.ALL);
     }
 
@@ -30,6 +30,7 @@ public class FileMessageConverter extends AbstractHttpMessageConverter<File> {
     @Override
     protected File readInternal(Class<? extends File> clazz, HttpInputMessage inputMessage)
             throws IOException, HttpMessageNotReadableException {
+        log.info("PUT 请求上传文件");
         InputStream inputStream = inputMessage.getBody();
         return saveStream(inputStream);
     }

+ 0 - 43
dfs-store/src/main/java/cn/reghao/dfs/store/config/SwaggerConfig.java

@@ -1,43 +0,0 @@
-package cn.reghao.dfs.store.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
-/**
- * 配置 Swagger
- * Swagger 仅在 dev 和 test 环境生效
- *
- * @author reghao
- * @date 2019-05-14 17:01:07
- */
-@Profile({"dev"})
-@Configuration
-@EnableSwagger2
-public class SwaggerConfig {
-    @Bean
-    public Docket createRestApi() {
-        return new Docket(DocumentationType.SWAGGER_2)
-                .apiInfo(apiInfo())
-                .select()
-                .apis(RequestHandlerSelectors.basePackage("cn.reghao.dfs.store.controller"))
-                .paths(PathSelectors.any())
-                .build();
-    }
-
-    private ApiInfo apiInfo() {
-        return new ApiInfoBuilder()
-                .title("OSS APIs")
-                .description("")
-                .termsOfServiceUrl("")
-                .version("1.0.0")
-                .build();
-    }
-}

+ 9 - 23
dfs-store/src/main/java/cn/reghao/dfs/store/config/WebConfig.java

@@ -1,8 +1,7 @@
 package cn.reghao.dfs.store.config;
 
-import cn.reghao.dfs.store.inerceptor.FileAccessInterceptor;
+import cn.reghao.dfs.store.inerceptor.AccessLogInterceptor;
 import cn.reghao.dfs.store.inerceptor.JwtTokenFilter;
-import org.springframework.boot.autoconfigure.web.servlet.MultipartProperties;
 import org.springframework.boot.web.servlet.FilterRegistrationBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -10,11 +9,8 @@ import org.springframework.http.converter.HttpMessageConverter;
 import org.springframework.http.converter.StringHttpMessageConverter;
 import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
 import org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter;
-import org.springframework.web.multipart.support.StandardServletMultipartResolver;
-import org.springframework.web.servlet.DispatcherServlet;
 import org.springframework.web.servlet.config.annotation.CorsRegistry;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
 
 import javax.servlet.Filter;
@@ -26,26 +22,16 @@ import java.util.List;
  */
 @Configuration
 public class WebConfig extends WebMvcConfigurationSupport {
-    private final FileAccessInterceptor fileAccessInterceptor;
-    private final MultipartProperties multipartProperties;
+    private final AccessLogInterceptor accessLogInterceptor;
 
-    public WebConfig(FileAccessInterceptor fileAccessInterceptor, MultipartProperties multipartProperties) {
-        this.fileAccessInterceptor = fileAccessInterceptor;
-        this.multipartProperties = multipartProperties;
+    public WebConfig(AccessLogInterceptor accessLogInterceptor) {
+        this.accessLogInterceptor = accessLogInterceptor;
     }
 
     @Override
-    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
-        registry.addResourceHandler("swagger-ui.html")
-                .addResourceLocations("classpath:/META-INF/resources/");
-        registry.addResourceHandler("/webjars/**")
-                .addResourceLocations("classpath:/META-INF/resources/webjars/");
-    }
-
-    /*@Override
     public void addInterceptors(InterceptorRegistry registry) {
-        registry.addInterceptor(fileAccessInterceptor);
-    }*/
+        registry.addInterceptor(accessLogInterceptor);
+    }
 
     // TODO 若 dfs-gw 中处理了跨域, 那么这里需要注释
     @Override
@@ -58,13 +44,13 @@ public class WebConfig extends WebMvcConfigurationSupport {
                 .allowedHeaders("*");
     }
 
-    /*@Bean
+    @Bean
     public FilterRegistrationBean<Filter> jwtTokenFilter() {
         FilterRegistrationBean<Filter> registrationBean = new FilterRegistrationBean<>();
         registrationBean.setFilter(new JwtTokenFilter());
         registrationBean.addUrlPatterns("*");
         return registrationBean;
-    }*/
+    }
 
     /**
      * HTTP req/resp 消息转换器
@@ -76,7 +62,7 @@ public class WebConfig extends WebMvcConfigurationSupport {
     @Override
     public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
         // 处理 application/octet-stream 数据
-        converters.add(new FileMessageConverter());
+        converters.add(new PutMessageConverter());
         // 处理 application/json 数据
         converters.add(new StringHttpMessageConverter());
         converters.add(new MappingJackson2HttpMessageConverter());

+ 0 - 81
dfs-store/src/main/java/cn/reghao/dfs/store/controller/BucketBasicController.java

@@ -1,81 +0,0 @@
-package cn.reghao.dfs.store.controller;
-
-import cn.reghao.dfs.store.model.dto.GetBucket;
-import cn.reghao.dfs.store.model.vo.ListBucketResult;
-import cn.reghao.dfs.store.service.BucketService;
-import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.http.MediaType;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * @author reghao
- * @date 2022-12-08 20:37:32
- */
-@Api(tags = "存储桶基础操作接口")
-@RestController
-public class BucketBasicController {
-    private final BucketService bucketService;
-
-    public BucketBasicController(BucketService bucketService) {
-        this.bucketService = bucketService;
-    }
-
-    @ApiOperation("创建一个存储桶")
-    @PutMapping(value = "/", produces = MediaType.APPLICATION_XML_VALUE)
-    public String putBucket() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("检查存储桶是否存在")
-    @RequestMapping(value = "/", method = RequestMethod.HEAD, produces = MediaType.APPLICATION_XML_VALUE)
-    public String headBucket() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶中的部分对象")
-    @GetMapping(value = "/", produces = MediaType.APPLICATION_XML_VALUE)
-    public ListBucketResult getBucket(@Validated GetBucket getBucket) {
-        // listType = 2
-        ListBucketResult listBucketResult = bucketService.list(getBucket);
-        return listBucketResult;
-    }
-
-    @ApiOperation(value = "删除指定的存储桶")
-    @DeleteMapping(value = "/", produces = MediaType.APPLICATION_XML_VALUE)
-    public String deleteBucket() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("添加或修改存储桶的 ACL 配置")
-    @PutMapping(value = "/", params = {"acl"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String putBucketAcl() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶的 ACL")
-    @GetMapping(value = "/", params = {"acl"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String getBucketAcl() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("添加或修改存储桶的权限策略配置")
-    @PutMapping(value = "/", params = {"policy"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String putBucketPolicy() {
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "删除指定存储桶的策略配置")
-    @DeleteMapping(value = "/", params = {"policy"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String deleteBucketPolicy() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶的权限策略配置")
-    @GetMapping(value = "/", params = {"policy"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String getBucketPolicy() {
-        return WebResult.success();
-    }
-}

+ 0 - 201
dfs-store/src/main/java/cn/reghao/dfs/store/controller/BucketController.java

@@ -1,201 +0,0 @@
-package cn.reghao.dfs.store.controller;
-
-import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * @author reghao
- * @date 2022-11-21 15:12:11
- */
-@Api(tags = "存储桶接口")
-@RestController
-public class BucketController {
-    @ApiOperation(value = "删除指定存储桶的 CORS 配置")
-    @DeleteMapping(value = "/", params = {"cors"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String deleteBucketCors() {
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "删除指定存储桶的默认加密配置")
-    @DeleteMapping(value = "/", params = {"encryption"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String deleteBucketEncryption() {
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "删除指定存储桶的复制配置")
-    @DeleteMapping(value = "/", params = {"replication"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String deleteBucketReplication() {
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "删除指定存储桶的静态网站托管配置")
-    @DeleteMapping(value = "/", params = {"website"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String deleteBucketWebsite() {
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "删除指定存储桶的生命周期配置")
-    @DeleteMapping(value = "/", params = {"lifecycle"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String deleteBucketLifecycle() {
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "删除指定存储桶的某个清单任务")
-    @DeleteMapping(value = "/", params = {"inventory"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String deleteBucketInventoryConfiguration(@RequestParam("id") String id) {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶的回调通知配置")
-    @GetMapping(value = "/", params = {"notification"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String getBucketNotification() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶的 cors 配置")
-    @GetMapping(value = "/", params = {"cors"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String getBucketCors() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶的默认加密配置")
-    @GetMapping(value = "/", params = {"encryption"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String getBucketEncryption() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶的策略配置")
-    @GetMapping(value = "/", params = {"uploadId"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String getBucketPolicy() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶的复制配置信息")
-    @GetMapping(value = "/", params = {"replication"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String getBucketReplication() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶的静态网站托管配置")
-    @GetMapping(value = "/", params = {"website"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String getBucketWebsite() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶的生命周期规则")
-    @GetMapping(value = "/", params = {"lifecycle"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String getBucketLifecycle() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶的默认保存周期策略")
-    @GetMapping(value = "/", params = {"object-lock"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String getBucketObjectLockConfiguration() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶中设置的标签")
-    @GetMapping(value = "/", params = {"tagging"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String getBucketTagging() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶的传输加速规则")
-    @GetMapping(value = "/", params = {"accelerate"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String getBucketAccelerate() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶中用户的任务清单")
-    @GetMapping(value = "/", params = {"inventory", "id"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String getBucketInventoryConfiguration(@PathVariable("id") String id) {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶的访问日志保存规则")
-    @GetMapping(value = "/", params = {"logging"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String getBucketLogging() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶中正在进行的分片上传")
-    @GetMapping(value = "/", params = {"uploads"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String listMultipartUploads(@RequestParam("maxUploads") int maxUploads) {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶的所有清单任务")
-    @GetMapping(value = "/", params = {"inventory", "continuationToken"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String listBucketInventoryConfigurations(@RequestParam("continuationToken") String continuationToken) {
-        return WebResult.success();
-    }
-
-    @ApiOperation("创建或修改存储桶的回调通知配置")
-    @PutMapping(value = "/", params = {"notification"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String putBucketNotification() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("添加或修改存储桶的 CORS 配置")
-    @PutMapping(value = "/", params = {"cors"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String putBucketCors() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("添加或修改存储桶的加密配置")
-    @PutMapping(value = "/", params = {"encryption"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String putBucketEncryption() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("添加或修改存储桶的复制配置")
-    @PutMapping(value = "/", params = {"replication"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String putBucketReplication() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("添加或修改存储桶的静态网站配置")
-    @PutMapping(value = "/", params = {"website"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String putBucketWebsite() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("添加或修改存储桶的生命周期配置")
-    @PutMapping(value = "/", params = {"lifecycle"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String putBucketLifecycle() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("添加或修改存储桶的默认保存周期策略")
-    @PutMapping(value = "/", params = {"object-lock"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String putBucketObjectLockConfiguration() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("添加或修改存储桶中设置的标签")
-    @PutMapping(value = "/", params = {"tagging"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String putBucketTagging() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("添加或修改存储桶的传输加速规则")
-    @PutMapping(value = "/", params = {"accelerate"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String putBucketAccelerate() {
-        return WebResult.success();
-    }
-
-    @ApiOperation("添加或修改存储桶中用户的任务清单")
-    @PutMapping(value = "/", params = {"inventory"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String putBucketInventoryConfiguration(@PathVariable("id") String id) {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取存储桶的访问日志保存规则")
-    @PutMapping(value = "/", params = {"logging"}, produces = MediaType.APPLICATION_XML_VALUE)
-    public String putBucketLogging() {
-        return WebResult.success();
-    }
-}

+ 0 - 11
dfs-store/src/main/java/cn/reghao/dfs/store/controller/MultipartUploadController.java

@@ -3,8 +3,6 @@ package cn.reghao.dfs.store.controller;
 import cn.reghao.dfs.store.model.dto.*;
 import cn.reghao.dfs.store.service.MultipartUploadService;
 import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.MediaType;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -20,7 +18,6 @@ import java.util.Map;
  * @date 2023-05-11 17:45:02
  */
 @RestController
-@Slf4j
 public class MultipartUploadController {
     private final MultipartUploadService multipartUploadService;
 
@@ -28,18 +25,14 @@ public class MultipartUploadController {
         this.multipartUploadService = multipartUploadService;
     }
 
-    @ApiOperation("创建分片上传")
     @PostMapping(value = "/", params = {"create"}, produces = MediaType.APPLICATION_JSON_VALUE)
     public String videoFilePrepare(@Validated UploadPrepare uploadPrepare) {
-        log.info("创建文件分片上传");
         UploadPrepareRet uploadPrepareRet = multipartUploadService.prepareUpload(uploadPrepare);
         return WebResult.success(uploadPrepareRet);
     }
 
-    @ApiOperation(value = "获取已上传的文件分片")
     @GetMapping(value = "/", params = {"multipart"}, produces = MediaType.APPLICATION_JSON_VALUE)
     public String uploadedVideoFilePart() {
-        log.info("返回已上传的文件分片");
         Map<String, Object> map = new HashMap<>();
         map.put("skipUpload", false);
         map.put("url", "");
@@ -48,18 +41,14 @@ public class MultipartUploadController {
         return WebResult.success(map);
     }
 
-    @ApiOperation(value = "上传分片文件")
     @PostMapping(value = "/", params = {"multipart"}, produces = MediaType.APPLICATION_JSON_VALUE)
     public String uploadVideoFile0(@Validated UploadFilePart uploadFilePart) throws Exception {
-        log.info("上传的文件分片");
         FilePartRet uploadedFileRet = multipartUploadService.putFilePart(uploadFilePart);
         return WebResult.success(uploadedFileRet);
     }
 
-    @ApiOperation(value = "合并分片文件")
     @PostMapping(value = "/", params = {"merge"}, produces = MediaType.APPLICATION_JSON_VALUE)
     public String merge() {
-        log.info("合并上传的文件分片");
         return WebResult.success();
     }
 }

+ 0 - 56
dfs-store/src/main/java/cn/reghao/dfs/store/controller/ObjectController.java

@@ -1,56 +0,0 @@
-package cn.reghao.dfs.store.controller;
-
-import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * @author reghao
- * @date 2022-11-21 15:12:00
- */
-@Api(tags = "对象接口")
-@RestController
-public class ObjectController {
-    @ApiOperation("开启或关闭对象的依法保留状态")
-    @PutMapping(value = "/{objectKey}", params = {"legal-hold"})
-    public String putObjectLegalHold(@PathVariable("objectKey") String objectKey) {
-        return WebResult.success();
-    }
-
-    @ApiOperation("设置对象的保留周期")
-    @PutMapping(value = "/{objectKey}", params = {"retention"})
-    public String putObjectRetention(@PathVariable("objectKey") String objectKey) {
-        return WebResult.success();
-    }
-
-    @ApiOperation("设置对象的标签")
-    @PutMapping(value = "/{objectKey}", params = {"tagging"})
-    public String putObjectTagging(@PathVariable("objectKey") String objectKey) {
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "对存储类型为 GLACIER 的对象还原临时副本")
-    @PostMapping(value = "/{objectName}", params = {"restore"})
-    public String postObjectRestore(@PathVariable("objectName") String objectName) {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取对象的依法保留状态")
-    @GetMapping(value = "/{objectKey}", params = {"legal-hold"})
-    public String getObjectLegalHold(@PathVariable("objectKey") String objectKey) {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取对象的保留周期")
-    @GetMapping(value = "/{objectKey}", params = {"retention"})
-    public String getObjectRetention(@PathVariable("objectKey") String objectKey) {
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取对象的标签")
-    @GetMapping(value = "/{objectKey}", params = {"tagging"})
-    public String getObjectTagging(@PathVariable("objectKey") String objectKey) {
-        return WebResult.success();
-    }
-}

+ 44 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/controller/ObjectGetController.java

@@ -0,0 +1,44 @@
+package cn.reghao.dfs.store.controller;
+
+import cn.reghao.dfs.store.service.GetObjectService;
+import cn.reghao.jutil.web.ServletUtil;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * @author reghao
+ * @date 2022-12-08 20:38:33
+ */
+@RestController
+public class ObjectGetController {
+    private final GetObjectService getObjectService;
+
+    public ObjectGetController(GetObjectService getObjectService) {
+        this.getObjectService = getObjectService;
+    }
+
+    @RequestMapping(value = "/**", method = RequestMethod.HEAD)
+    public void headObject() throws IOException {
+        String uri = ServletUtil.getRequest().getRequestURI();
+        String uri1 = URLDecoder.decode(uri, StandardCharsets.UTF_8);
+
+        String objectName = uri1.replaceFirst("/", "");
+        getObjectService.headObject(objectName);
+    }
+
+    @GetMapping(value = "/**")
+    public void getObject(@RequestParam(value = "OSSAccessId", required = false) String ossAccessId,
+                          @RequestParam(value = "Expires", required = false) String expires,
+                          @RequestParam(value = "Signature", required = false) String signature) throws IOException {
+        HttpServletRequest servletRequest = ServletUtil.getRequest();
+        String uri = servletRequest.getRequestURI();
+        String uri1 = URLDecoder.decode(uri, StandardCharsets.UTF_8);
+
+        String objectName = uri1.replaceFirst("/", "");
+        getObjectService.getObject(objectName);
+    }
+}

+ 2 - 23
dfs-store/src/main/java/cn/reghao/dfs/store/controller/ObjectMultipartUploadController.java

@@ -1,30 +1,19 @@
 package cn.reghao.dfs.store.controller;
 
-import cn.reghao.dfs.store.model.s3.CopyPartResult;
-import cn.reghao.dfs.store.model.vo.*;
-import cn.reghao.dfs.store.redis.ds.RedisString;
+import cn.reghao.dfs.store.model.s3.*;
 import cn.reghao.dfs.store.service.FileStoreService;
 import cn.reghao.dfs.store.util.OssUtil;
 import cn.reghao.jutil.jdk.converter.ByteHex;
-import cn.reghao.jutil.jdk.io.FilePart;
 import cn.reghao.jutil.jdk.result.WebResult;
 import cn.reghao.jutil.jdk.security.Base64Util;
 import cn.reghao.jutil.jdk.security.DigestUtil;
-import cn.reghao.jutil.web.ServletUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
 
-import javax.servlet.http.HttpServletRequest;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
 import java.security.NoSuchAlgorithmException;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
@@ -34,20 +23,15 @@ import java.util.*;
  * @author reghao
  * @date 2022-12-08 20:40:55
  */
-@Api(tags = "对象分片上传接口")
 @RestController
 public class ObjectMultipartUploadController {
     private static final Map<String, Map<Long, String>> map = new TreeMap<>();
     private final FileStoreService storeService;
-    private final FilePart filePart = new FilePart();
-    private RedisString redisString;
 
-    public ObjectMultipartUploadController(FileStoreService storeService, RedisString redisString) {
+    public ObjectMultipartUploadController(FileStoreService storeService) {
         this.storeService = storeService;
-        this.redisString = redisString;
     }
 
-    @ApiOperation("开启分片上传")
     @PostMapping(value = "/**", params = {"uploads"})
     public ResponseEntity<InitiateMultipartUploadResult> initiateMultipartUpload() {
         String objectName = OssUtil.getObjectName();
@@ -61,7 +45,6 @@ public class ObjectMultipartUploadController {
                 .body(result);
     }
 
-    @ApiOperation("分片上传对象")
     @PutMapping(value = "/**", params = {"partNumber", "uploadId"})
     public ResponseEntity<String> uploadPart(@RequestParam("partNumber") long partNumber,
                                              @RequestParam("uploadId") String uploadId,
@@ -88,7 +71,6 @@ public class ObjectMultipartUploadController {
                 .build();
     }
 
-    @ApiOperation(value = "完成分片上传")
     @PostMapping(value = "/**", params = {"uploadId"}, consumes = MediaType.APPLICATION_XML_VALUE)
     public ResponseEntity<CompleteMultipartUploadResult> completeMultipartUpload(@RequestParam("uploadId") String uploadId,
                                                                                  @RequestBody CompleteMultipartUpload completeMultipartUpload) {
@@ -119,7 +101,6 @@ public class ObjectMultipartUploadController {
                 .body(result);
     }
 
-    @ApiOperation(value = "终止分片上传")
     @DeleteMapping(value = "/**", params = {"uploadId"})
     public String abortMultipartUpload(@RequestParam("uploadId") String uploadId) {
         Map<Long, String> fileMap = map.get(uploadId);
@@ -127,7 +108,6 @@ public class ObjectMultipartUploadController {
         return WebResult.success();
     }
 
-    @ApiOperation("获取分片上传 uploadId 下的所有分片")
     @GetMapping(value = "/**", params = {"uploadId"})
     public ResponseEntity<ListPartsResult> listParts(@RequestParam("uploadId") String uploadId,
                                                      @RequestParam(value = "encodingType", required = false) String encodingType,
@@ -154,7 +134,6 @@ public class ObjectMultipartUploadController {
                 .body(listPartsResult);
     }
 
-    @ApiOperation("复制已存在的对象作为源数据上传分片")
     @PutMapping(value = "/**", params = {"partNumber", "uploadId"}, headers = {"x-amz-copy-source"})
     public ResponseEntity<CopyPartResult> uploadPartCopy(@RequestParam("partNumber") long partNumber,
                                                          @RequestParam("uploadId") String uploadId) {

+ 16 - 65
dfs-store/src/main/java/cn/reghao/dfs/store/controller/ObjectBasicController.java → dfs-store/src/main/java/cn/reghao/dfs/store/controller/ObjectUploadController.java

@@ -1,10 +1,8 @@
 package cn.reghao.dfs.store.controller;
 
 import cn.reghao.dfs.store.model.dto.PostObject;
-import cn.reghao.dfs.store.model.dto.DeleteObjects;
-import cn.reghao.dfs.store.model.vo.PostResponse;
+import cn.reghao.dfs.store.model.s3.PostResponse;
 import cn.reghao.dfs.store.redis.ds.RedisString;
-import cn.reghao.dfs.store.service.GetObjectService;
 import cn.reghao.dfs.store.service.PutObjectService;
 import cn.reghao.jutil.jdk.converter.ByteHex;
 import cn.reghao.jutil.jdk.result.WebResult;
@@ -12,43 +10,38 @@ import cn.reghao.jutil.jdk.security.Base64Util;
 import cn.reghao.jutil.jdk.security.DigestUtil;
 import cn.reghao.jutil.web.ServletUtil;
 import cn.reghao.oss.common.OssUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.ResponseEntity;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.IOException;
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+import java.util.UUID;
 
 /**
  * @author reghao
- * @date 2022-12-08 20:38:33
+ * @date 2023-05-19 16:20:12
  */
-@Slf4j
-@Api(tags = "对象基础操作接口")
 @RestController
-public class ObjectBasicController {
+public class ObjectUploadController {
     private final PutObjectService putObjectService;
-    private final GetObjectService getObjectService;
     private final RedisString redisString;
 
-    public ObjectBasicController(PutObjectService putObjectService, GetObjectService getObjectService, RedisString redisString) {
+    public ObjectUploadController(PutObjectService putObjectService, RedisString redisString) {
         this.putObjectService = putObjectService;
-        this.getObjectService = getObjectService;
         this.redisString = redisString;
     }
 
-    @ApiOperation("上传对象")
     @PutMapping(value = "/**")
     public ResponseEntity<String> putObject(@RequestBody File file) throws Exception {
         HttpServletRequest servletRequest = ServletUtil.getRequest();
@@ -73,7 +66,7 @@ public class ObjectBasicController {
         }
 
         String accessKey = OssUtil.getAccessKey();
-        if (accessKey == null) {
+        /*if (accessKey == null) {
             return ResponseEntity.status(500).body("accessKeyId 不存在");
         } else {
             String secretKey = redisString.get(accessKey);
@@ -85,7 +78,7 @@ public class ObjectBasicController {
             if (!matched) {
                 return ResponseEntity.status(500).body("签名不正确");
             }
-        }
+        }*/
 
         String objectName = OssUtil.getObjectName();
         putObjectService.putObject(objectName, file, sha256sum);
@@ -103,7 +96,6 @@ public class ObjectBasicController {
                 .build();
     }
 
-    @ApiOperation("使用 formdata 上传对象")
     @PostMapping(value = "/")
     public String postObject(@Validated PostObject postObject) throws Exception {
         String credential = postObject.getXAmzCredential();
@@ -125,52 +117,11 @@ public class ObjectBasicController {
         File tmpFile = new File(tmpPath);
         multipartFile.transferTo(tmpFile);
 
-        FileInputStream fis = new FileInputStream(tmpFile);
+        /*FileInputStream fis = new FileInputStream(tmpFile);
         String sha256sum = DigestUtil.sha256sum(fis);
         putObjectService.putObject(objectName, tmpFile, sha256sum);
-        tmpFile.delete();
+        tmpFile.delete();*/
         PostResponse postResponse = new PostResponse();
         return WebResult.success(postResponse);
     }
-
-    @ApiOperation("获取对象的元数据")
-    @RequestMapping(value = "/**", method = RequestMethod.HEAD)
-    public void headObject() throws IOException {
-        String uri = ServletUtil.getRequest().getRequestURI();
-        String uri1 = URLDecoder.decode(uri, StandardCharsets.UTF_8);
-
-        String objectName = uri1.replaceFirst("/", "");
-        getObjectService.headObject(objectName);
-    }
-
-    @ApiOperation("获取对象")
-    @GetMapping(value = "/**")
-    public void getObject(@RequestParam(value = "OSSAccessId", required = false) String ossAccessId,
-                          @RequestParam(value = "Expires", required = false) String expires,
-                          @RequestParam(value = "Signature", required = false) String signature) throws IOException {
-        HttpServletRequest servletRequest = ServletUtil.getRequest();
-        String uri = servletRequest.getRequestURI();
-        String uri1 = URLDecoder.decode(uri, StandardCharsets.UTF_8);
-
-        String objectName = uri1.replaceFirst("/", "");
-        getObjectService.getObject(objectName);
-    }
-
-    @ApiOperation(value = "删除对象")
-    @DeleteMapping(value = "/{objectName}")
-    public String deleteObject(@PathVariable("objectName") String objectName) {
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "删除多个对象")
-    @PostMapping(value = "/", params = {"delete"})
-    public String deleteMultipleObjects(DeleteObjects deleteObjects) {
-        return WebResult.success();
-    }
-
-    @ApiOperation("创建已存在对象的副本")
-    @PutMapping(value = "/{destinationObject}", params = {"destinationObject"})
-    public String putObjectCopy(@PathVariable("destinationObject") String destinationObject) {
-        return WebResult.success();
-    }
 }

+ 0 - 27
dfs-store/src/main/java/cn/reghao/dfs/store/controller/ServiceController.java

@@ -1,27 +0,0 @@
-package cn.reghao.dfs.store.controller;
-
-import cn.reghao.dfs.store.model.vo.service.ListAllMyBucketsResult;
-import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author reghao
- * @date 2022-11-21 15:12:53
- */
-@Api(tags = "服务接口")
-@RestController
-@RequestMapping("/service")
-public class ServiceController {
-    @ApiOperation("获取请求用户拥有的所有存储桶")
-    @GetMapping(value = "/", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String getObjectLegalHold(@PathVariable("objectKey") String objectKey) {
-        ListAllMyBucketsResult listAllMyBucketsResult = new ListAllMyBucketsResult();
-        return WebResult.success();
-    }
-}

+ 0 - 21
dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/BucketMapper.java

@@ -1,21 +0,0 @@
-package cn.reghao.dfs.store.db.mapper;
-
-import cn.reghao.dfs.api.dto.BucketInfo;
-import cn.reghao.dfs.api.dto.BucketRegion;
-import cn.reghao.dfs.store.model.po.Bucket;
-import cn.reghao.jutil.jdk.db.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2023-01-05 09:23:38
- */
-@Mapper
-public interface BucketMapper extends BaseMapper<Bucket> {
-    Bucket findByName(@Param("bucketName") String bucketName);
-    List<BucketRegion> findAll1();
-    List<BucketInfo> findBucketInfo();
-}

+ 0 - 14
dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/FileContentMapper.java

@@ -1,14 +0,0 @@
-package cn.reghao.dfs.store.db.mapper;
-
-import cn.reghao.dfs.store.model.po.FileContent;
-import cn.reghao.jutil.jdk.db.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * @author reghao
- * @date 2023-05-10 08:03:35
- */
-@Mapper
-public interface FileContentMapper extends BaseMapper<FileContent> {
-    String findContentId(String objectId);
-}

+ 26 - 4
dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/FileMetaMapper.java

@@ -1,6 +1,7 @@
 package cn.reghao.dfs.store.db.mapper;
 
-import cn.reghao.dfs.api.dto.HeadObjectResult;
+import cn.reghao.dfs.api.dto.DeleteFile;
+import cn.reghao.dfs.api.dto.FileInfoVO;
 import cn.reghao.dfs.store.model.po.FileMeta;
 import cn.reghao.dfs.store.model.vo.ObjectMeta;
 import cn.reghao.jutil.jdk.db.BaseMapper;
@@ -18,13 +19,34 @@ import java.util.List;
 public interface FileMetaMapper extends BaseMapper<FileMeta> {
     FileMeta findBySha256sum(String sha256sum);
     FileMeta findByObjectName(String objectName);
-    HeadObjectResult findByObjectName1(String objectName);
+    FileMeta findByObjectId(String objectId);
+
     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);
     List<FileMeta> findAll2(@Param("bucket") String bucket, @Param("prefix") String prefix,
                             @Param("start") String start, @Param("max") Integer max);
-    @Deprecated
+
+    List<FileMeta> findFileMetaByPage(Page page);
     ObjectMeta findObjectMeta(String objectName);
-    ObjectMeta findObjectMeta1(String objectName);
     List<ObjectMeta> findObjectMetaByPage(Page page);
+
+    /******************************************************************************************************************/
+    void updateFilename(@Param("objectId") String objectId, @Param("filename") String filename);
+    void updateParent(@Param("objectId") String objectId, @Param("pid") String pid);
+    void updateSetDelete(String objectId);
+    void deleteByObjectId(String objectId);
+
+    int countByPid(String pid);
+    List<FileInfoVO> findFileInfoByPage(Page page, @Param("pid") String pid);
+    List<FileInfoVO> findFileInfo1ByPage(Page page, @Param("pid") String pid);
+    List<FileInfoVO> findDirectories(String pid);
+
+    int countByKeyword(String keyword);
+    List<FileInfoVO> findKeywordByPage(Page page, @Param("keyword") String keyword);
+
+    int countDeletedFiles();
+    List<DeleteFile> findDeletedFileByPage(Page page);
+    List<FileMeta> findFileInfos(@Param("objectIds") List<String> objectIds);
+    List<FileMeta> findByFilename(@Param("pid") String pid, @Param("filename") String filename);
+    List<FileMeta> findByPid(String pid);
 }

+ 0 - 4
dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/FileTypeMapper.java

@@ -1,17 +1,13 @@
 package cn.reghao.dfs.store.db.mapper;
 
-import cn.reghao.dfs.api.dto.FileIcon;
 import cn.reghao.dfs.store.model.po.FileType;
 import cn.reghao.jutil.jdk.db.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 
-import java.util.List;
-
 /**
  * @author reghao
  * @date 2022-12-27 16:59:15
  */
 @Mapper
 public interface FileTypeMapper extends BaseMapper<FileType> {
-    List<FileIcon> findAll1();
 }

+ 16 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/ImageFileMapper.java

@@ -0,0 +1,16 @@
+package cn.reghao.dfs.store.db.mapper;
+
+import cn.reghao.dfs.api.dto.ImageUrl;
+import cn.reghao.dfs.store.model.po.ImageFile;
+import cn.reghao.jutil.jdk.db.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author reghao
+ * @date 2021-12-08 14:41:35
+ */
+@Mapper
+public interface ImageFileMapper extends BaseMapper<ImageFile> {
+    ImageFile findByImageFileId(String imageFileId);
+    ImageUrl findImageUrl(String imageFileId);
+}

+ 0 - 19
dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/RegionMapper.java

@@ -1,19 +0,0 @@
-package cn.reghao.dfs.store.db.mapper;
-
-import cn.reghao.dfs.api.dto.KeyValue;
-import cn.reghao.dfs.store.model.po.Region;
-import cn.reghao.jutil.jdk.db.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2023-01-05 09:23:27
- */
-@Mapper
-public interface RegionMapper extends BaseMapper<Region> {
-    Integer findIdByLocation(@Param("location") String location);
-    List<KeyValue> findKeyValues();
-}

+ 13 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/VideoFileMapper.java

@@ -0,0 +1,13 @@
+package cn.reghao.dfs.store.db.mapper;
+
+import cn.reghao.dfs.store.model.po.VideoFile;
+import cn.reghao.jutil.jdk.db.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author reghao
+ * @date 2021-12-07 18:59:11
+ */
+@Mapper
+public interface VideoFileMapper extends BaseMapper<VideoFile> {
+}

+ 18 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/VideoUrlMapper.java

@@ -0,0 +1,18 @@
+package cn.reghao.dfs.store.db.mapper;
+
+import cn.reghao.dfs.api.dto.VideoUrlDto;
+import cn.reghao.dfs.store.model.po.VideoUrl;
+import cn.reghao.jutil.jdk.db.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2022-08-04 09:31:27
+ */
+@Mapper
+public interface VideoUrlMapper extends BaseMapper<VideoUrl> {
+    List<VideoUrlDto> findVideoUrls(@Param("videoFileId") String videoFileId, @Param("urlType") String urlType);
+}

+ 83 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/inerceptor/AccessLogInterceptor.java

@@ -0,0 +1,83 @@
+package cn.reghao.dfs.store.inerceptor;
+
+import cn.reghao.dfs.store.db.mapper.FileMetaMapper;
+import cn.reghao.dfs.store.model.constant.ObjectACL;
+import cn.reghao.dfs.store.model.po.FileMeta;
+import cn.reghao.tnb.account.api.iface.UserQuery;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.lang.Nullable;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLDecoder;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * 访问日志拦截器
+ *
+ * @author reghao
+ * @date 2021-12-30 12:19:07
+ */
+@Slf4j
+@Component
+public class AccessLogInterceptor implements HandlerInterceptor {
+    @DubboReference(check = false)
+    private UserQuery userQuery;
+    private final FileMetaMapper fileMetaMapper;
+
+    public AccessLogInterceptor(FileMetaMapper fileMetaMapper) {
+        this.fileMetaMapper = fileMetaMapper;
+    }
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
+            throws Exception {
+        String uri = request.getRequestURI();
+        String method = request.getMethod();
+        if (method.equals("OPTIONS")) {
+            return true;
+        }
+
+        if (method.equals("GET")) {
+            String objectName = URLDecoder.decode(uri, StandardCharsets.UTF_8).replaceFirst("/", "");
+            FileMeta fileMeta = fileMetaMapper.findByObjectName(objectName);
+            if (fileMeta == null) {
+                return false;
+            }
+
+            int acl = fileMeta.getAcl();
+            if (acl == 1) {
+                response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+                return false;
+            }
+        }
+
+        String userAgent = request.getHeader("user-agent");
+        String ipv4 = request.getRemoteAddr();
+        String referer = request.getHeader("referer");
+        String sign = request.getParameter("sign");
+
+        long userId = Long.parseLong(request.getHeader("x-user-id"));
+        //UserPermission userPermission = userQuery.getUserPermission(userId);
+        log.info("{}: {} -> {}", userId, method, uri);
+        return false;
+    }
+
+    @Override
+    public void postHandle(HttpServletRequest request, HttpServletResponse response,
+                           Object handler, @Nullable ModelAndView modelAndView) throws Exception {
+
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
+                                Object handler, @Nullable Exception ex) throws Exception {
+        String uri = request.getRequestURI();
+        int statusCode = response.getStatus();
+        log.info("{} -> {}", statusCode, uri);
+    }
+}

+ 0 - 50
dfs-store/src/main/java/cn/reghao/dfs/store/inerceptor/FileAccessInterceptor.java

@@ -1,50 +0,0 @@
-package cn.reghao.dfs.store.inerceptor;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.lang.Nullable;
-import org.springframework.stereotype.Component;
-import org.springframework.web.servlet.HandlerInterceptor;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * 拦截对文件的访问, 判断访问是否具有权限
- *
- * @author reghao
- * @date 2021-12-30 12:19:07
- */
-@Slf4j
-@Component
-public class FileAccessInterceptor implements HandlerInterceptor {
-    // TODO 添加防盗链处理
-    @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
-            throws Exception {
-        String uri = request.getRequestURI();
-        String method = request.getMethod();
-        String userAgent = request.getHeader("user-agent");
-        String ipv4 = request.getRemoteAddr();
-
-        String referer = request.getHeader("referer");
-        String sign = request.getParameter("sign");
-        return true;
-    }
-
-    @Override
-    public void postHandle(HttpServletRequest request, HttpServletResponse response,
-                           Object handler, @Nullable ModelAndView modelAndView) throws Exception {
-
-    }
-
-    @Override
-    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
-                                Object handler, @Nullable Exception ex) throws Exception {
-        String uri = request.getRequestURI();
-        if (!uri.startsWith("/api")) {
-            int statusCode = response.getStatus();
-            log.info("{} -> {}", uri, statusCode);
-        }
-    }
-}

+ 5 - 10
dfs-store/src/main/java/cn/reghao/dfs/store/inerceptor/JwtTokenFilter.java

@@ -4,23 +4,19 @@ import cn.reghao.jutil.tool.jwt.Jwt;
 import cn.reghao.jutil.tool.jwt.JwtPayload;
 import io.jsonwebtoken.ExpiredJwtException;
 import io.jsonwebtoken.JwtException;
-import org.springframework.core.io.buffer.DataBuffer;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
+import lombok.extern.slf4j.Slf4j;
 
 import javax.servlet.*;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.PrintWriter;
-import java.nio.charset.StandardCharsets;
-import java.util.List;
-import java.util.function.Consumer;
 
 /**
  * @author reghao
  * @date 2022-08-25 21:14:23
  */
+@Slf4j
 public class JwtTokenFilter implements Filter {
     @Override
     public void init(FilterConfig filterConfig) throws ServletException {
@@ -31,10 +27,10 @@ public class JwtTokenFilter implements Filter {
                          FilterChain chain) throws IOException, ServletException {
         HttpServletRequest httpServletRequest = (HttpServletRequest) request;
         MutableHttpServletRequest mutableHttpServletRequest = new MutableHttpServletRequest(httpServletRequest);
-        /*String jwtToken = getJwtToken(httpServletRequest);
+        String jwtToken = getJwtToken(httpServletRequest);
         if (jwtToken != null) {
             try {
-                JwtPayload jwtPayload = Jwt.parse(jwtToken);
+                JwtPayload jwtPayload = Jwt.parse(jwtToken, "");
                 String userId = jwtPayload.getUserId();
                 mutableHttpServletRequest.putHeader("x-user-id", userId);
             } catch (JwtException jwtException) {
@@ -52,9 +48,8 @@ public class JwtTokenFilter implements Filter {
             }
         } else {
             mutableHttpServletRequest.putHeader("x-user-id", "-1");
-        }*/
+        }
 
-        mutableHttpServletRequest.putHeader("x-user-id", "-1");
         chain.doFilter(mutableHttpServletRequest, response);
     }
 

+ 9 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/model/constant/ObjectACL.java

@@ -0,0 +1,9 @@
+package cn.reghao.dfs.store.model.constant;
+
+/**
+ * @author reghao
+ * @date 2023-05-19 18:15:45
+ */
+public enum ObjectACL {
+    PRIVATE,PROTECT,FRIEND,PUBLIC
+}

+ 1 - 1
dfs-web/src/main/java/cn/reghao/dfs/web/model/po/ContentRange.java → dfs-store/src/main/java/cn/reghao/dfs/store/model/dto/ContentRange.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.web.model.po;
+package cn.reghao.dfs.store.model.dto;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;

+ 0 - 11
dfs-store/src/main/java/cn/reghao/dfs/store/model/dto/DeleteObjects.java

@@ -1,11 +0,0 @@
-package cn.reghao.dfs.store.model.dto;
-
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2022-11-21 16:14:23
- */
-public class DeleteObjects implements Serializable {
-    private static final long serialVersionUID = 1L;
-}

+ 0 - 16
dfs-store/src/main/java/cn/reghao/dfs/store/model/dto/FileContentType.java

@@ -1,16 +0,0 @@
-package cn.reghao.dfs.store.model.dto;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * @author reghao
- * @date 2022-04-26 17:08:19
- */
-@AllArgsConstructor
-@Getter
-public class FileContentType {
-    private String suffix;
-    private int fileType;
-    private String contentType;
-}

+ 0 - 29
dfs-store/src/main/java/cn/reghao/dfs/store/model/dto/GetBucket.java

@@ -1,29 +0,0 @@
-package cn.reghao.dfs.store.model.dto;
-
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-import javax.validation.constraints.NotNull;
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2022-12-08 11:14:44
- */
-@NoArgsConstructor
-@Getter
-@Setter
-public class GetBucket implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    @NotNull
-    private Integer listType;
-    private Integer maxKeys;
-    private String prefix;
-    private String startAfter;
-    private String delimiter;
-    private String encodingType;
-    private String continuationToken;
-    private String fetchOwner;
-}

+ 4 - 2
dfs-store/src/main/java/cn/reghao/dfs/store/model/dto/PostObject.java

@@ -31,9 +31,11 @@ public class PostObject implements Serializable {
     private String xAmzCredential;
     private String xAmzDate;
     private String xAmzSignature;
-    private String xAmzStorageClass;
-    @NotBlank
+    private Boolean xAmzStorageClass;
+    //@NotBlank
     private String key;
     @NotNull
+    private Boolean xAmzUpload;
+    @NotNull
     private MultipartFile file;
 }

+ 0 - 18
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/Bucket.java

@@ -1,18 +0,0 @@
-package cn.reghao.dfs.store.model.po;
-
-import cn.reghao.jutil.jdk.db.BaseObject;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * @author reghao
- * @date 2023-01-05 09:22:20
- */
-@Getter
-@Setter
-public class Bucket extends BaseObject<Integer> {
-    private int regionId;
-    private String name;
-    private String storage;
-    private String acl;
-}

+ 0 - 15
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/ContentRange.java

@@ -1,15 +0,0 @@
-package cn.reghao.dfs.store.model.po;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * @author reghao
- * @date 2022-11-28 11:27:27
- */
-@AllArgsConstructor
-@Getter
-public class ContentRange {
-    private long start;
-    private long end;
-}

+ 5 - 5
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/DataBlock.java

@@ -15,17 +15,17 @@ import lombok.Setter;
 @Setter
 @Getter
 public class DataBlock extends BaseObject<Integer> {
-    private String contentId;
-    @Deprecated
-    private String objectId;
+    private String sha256sum;
     private int index;
     private String blockId;
     private String absolutePath;
     private long start;
     private long end;
+    @Deprecated
+    private String objectId;
 
-    public DataBlock(String contentId, int index, String blockId, String absolutePath) {
-        this.contentId = contentId;
+    public DataBlock(String sha256sum, int index, String blockId, String absolutePath) {
+        this.sha256sum = sha256sum;
         this.index = index;
         this.blockId = blockId;
         this.absolutePath = absolutePath;

+ 0 - 20
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/FileContent.java

@@ -1,20 +0,0 @@
-package cn.reghao.dfs.store.model.po;
-
-import cn.reghao.jutil.jdk.db.BaseObject;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-/**
- * @author reghao
- * @date 2023-05-10 08:02:44
- */
-@AllArgsConstructor
-@NoArgsConstructor
-@Setter
-@Getter
-public class FileContent extends BaseObject<Integer> {
-    private String contentId;
-    private String objectId;
-}

+ 35 - 19
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/FileMeta.java

@@ -4,6 +4,7 @@ import cn.reghao.jutil.jdk.db.BaseObject;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
+import lombok.Setter;
 
 import java.util.UUID;
 
@@ -14,26 +15,54 @@ import java.util.UUID;
  * @date 2022-11-21 10:53:10
  */
 @NoArgsConstructor
+@Setter
 @Getter
 public class FileMeta extends BaseObject<Integer> {
     private String objectName;
     private String objectId;
     private String filename;
     private Long size;
-    private Integer fileTypeId;
+    private Integer fileType;
     private String contentType;
     private String sha256sum;
-    private Integer bucketId;
+    private String pid;
+    private Long uploadBy;
+    private Boolean diskFile;
+    private int acl;
 
-    public FileMeta(String objectName, String objectId, String filename, long size, String contentType, String sha256sum) {
+    // 目录对象
+    public FileMeta(String pid, String objectId, String objectName, String filename) {
+        this.pid = pid;
+        this.objectId = objectId;
+        this.filename = filename;
+        this.fileType = 1000;
+        this.size = 0L;
+        this.objectName = objectName;
+        this.uploadBy = 10000L;
+    }
+
+    // 目录对象
+    public FileMeta(String objectName) {
+        this.objectName = objectName;
+        this.objectId = UUID.randomUUID().toString().replace("-", "");
+        this.filename = "dir";
+        this.size = 0L;
+        this.fileType = 1000;
+        this.contentType = "dir";
+        this.sha256sum = "0";
+    }
+
+    public FileMeta(String objectName, String objectId, String filename, long size,
+                    int fileType, String contentType, String sha256sum, String pid) {
         this.objectName = objectName;
         this.objectId = objectId;
         this.filename = filename;
         this.size = size;
-        this.fileTypeId = 1001;
+        this.fileType = fileType;
         this.contentType = contentType;
         this.sha256sum = sha256sum;
-        this.bucketId = 2;
+        this.pid = pid;
+        this.uploadBy = 10000L;
     }
 
     public FileMeta(String objectName, String objectId, String filename, FileMeta fileMeta) {
@@ -41,21 +70,8 @@ public class FileMeta extends BaseObject<Integer> {
         this.objectId = objectId;
         this.filename = filename;
         this.size = fileMeta.getSize();
-        this.fileTypeId = fileMeta.getFileTypeId();
+        this.fileType = fileMeta.getFileType();
         this.contentType = fileMeta.getContentType();
         this.sha256sum = fileMeta.getSha256sum();
-        this.bucketId = fileMeta.getBucketId();
-    }
-
-    // 目录对象
-    public FileMeta(String objectName) {
-        this.objectName = objectName;
-        this.objectId = UUID.randomUUID().toString().replace("-", "");
-        this.filename = "dir";
-        this.size = 0L;
-        this.fileTypeId = 1000;
-        this.contentType = "dir";
-        this.sha256sum = "0";
-        this.bucketId = 2;
     }
 }

+ 34 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/ImageFile.java

@@ -0,0 +1,34 @@
+package cn.reghao.dfs.store.model.po;
+
+import cn.reghao.jutil.jdk.db.BaseObject;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * 图像文件
+ *
+ * @author reghao
+ * @date 2021-12-08 13:52:01
+ */
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ImageFile extends BaseObject<Integer> {
+    private String imageFileId;
+    private Integer width;
+    private Integer height;
+    private Boolean horizontal;
+    private String originalUrl;
+    private String webpUrl;
+    private String thumbnailUrl;
+
+    public ImageFile(String imageFileId, Integer width, Integer height, Boolean horizontal, String originalUrl, String webpUrl) {
+        this.imageFileId = imageFileId;
+        this.width = width;
+        this.height = height;
+        this.horizontal = horizontal;
+        this.originalUrl = originalUrl;
+        this.webpUrl = webpUrl;
+    }
+}

+ 0 - 18
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/Region.java

@@ -1,18 +0,0 @@
-package cn.reghao.dfs.store.model.po;
-
-import cn.reghao.jutil.jdk.db.BaseObject;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * @author reghao
- * @date 2023-01-05 09:22:15
- */
-@Setter
-@Getter
-public class Region extends BaseObject<Integer> {
-    private String location;
-    private String nameZhCn;
-    private String nameEnUs;
-    private String endpoint;
-}

+ 45 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/VideoFile.java

@@ -0,0 +1,45 @@
+package cn.reghao.dfs.store.model.po;
+
+import cn.reghao.dfs.api.dto.VideoInfo;
+import cn.reghao.jutil.jdk.db.BaseObject;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ * 视频文件
+ *
+ * @author reghao
+ * @date 2021-11-22 10:21:15
+ */
+@NoArgsConstructor
+@Setter
+@Getter
+public class VideoFile extends BaseObject<Integer> {
+    private String videoId;
+    private String objectName;
+    private Boolean horizontal;
+    // 单位秒
+    private Integer duration;
+    private Boolean activate;
+    private Boolean auth;
+    @Deprecated
+    private String videoFileId;
+    @Deprecated
+    private String coverUrl;
+
+    public VideoFile(String videoFileId) {
+        this.videoFileId = videoFileId;
+        this.activate = false;
+        this.auth = true;
+    }
+
+    public VideoFile(VideoInfo videoInfo) {
+        this.videoId = videoInfo.getVideoId();
+        this.objectName = videoInfo.getVideoObjectName();
+        this.horizontal = videoInfo.getHorizontal();
+        this.duration = videoInfo.getDuration();
+        this.activate = false;
+        this.auth = true;
+    }
+}

+ 38 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/VideoUrl.java

@@ -0,0 +1,38 @@
+package cn.reghao.dfs.store.model.po;
+
+import cn.reghao.dfs.store.util.media.MediaResolution;
+import cn.reghao.jutil.jdk.db.BaseObject;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author reghao
+ * @date 2022-08-04 09:19:16
+ */
+@AllArgsConstructor
+@NoArgsConstructor
+@Getter
+public class VideoUrl extends BaseObject<Integer> {
+    private String videoId;
+    private String objectName;
+    private String urlType;
+    private String url;
+    private String quality;
+    private Integer width;
+    private Integer height;
+    @Deprecated
+    private String videoFileId;
+    @Deprecated
+    private String videoUrlId;
+
+    public VideoUrl(String videoId, String objectName, String urlType, String url, MediaResolution mediaResolution) {
+        this.videoId = videoId;
+        this.objectName = objectName;
+        this.urlType = urlType;
+        this.url = url;
+        this.quality = mediaResolution.getQuality();
+        this.width = mediaResolution.getWidth();
+        this.height = mediaResolution.getHeight();
+    }
+}

+ 0 - 11
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/bucket/CorsConfiguration.java

@@ -1,11 +0,0 @@
-package cn.reghao.dfs.store.model.po.bucket;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2022-11-22 11:29:15
- */
-public class CorsConfiguration {
-    private List<CorsRule> corsRules;
-}

+ 0 - 13
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/bucket/CorsRule.java

@@ -1,13 +0,0 @@
-package cn.reghao.dfs.store.model.po.bucket;
-
-/**
- * @author reghao
- * @date 2022-11-22 11:24:02
- */
-public class CorsRule {
-    private String allowedOrigin;
-    private String allowedMethod;
-    private String allowedHeader;
-    private String maxAgeSeconds;
-    private String exposeHeader;
-}

+ 0 - 9
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/bucket/Expiration.java

@@ -1,9 +0,0 @@
-package cn.reghao.dfs.store.model.po.bucket;
-
-/**
- * @author reghao
- * @date 2022-11-22 14:27:26
- */
-public class Expiration {
-    private int days;
-}

+ 0 - 9
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/bucket/Filter.java

@@ -1,9 +0,0 @@
-package cn.reghao.dfs.store.model.po.bucket;
-
-/**
- * @author reghao
- * @date 2022-11-22 14:27:03
- */
-public class Filter {
-    private String prefix;
-}

+ 0 - 11
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/bucket/LifecycleConfiguration.java

@@ -1,11 +0,0 @@
-package cn.reghao.dfs.store.model.po.bucket;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2022-11-22 14:28:46
- */
-public class LifecycleConfiguration {
-    private List<Rule> rules;
-}

+ 0 - 13
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/bucket/Rule.java

@@ -1,13 +0,0 @@
-package cn.reghao.dfs.store.model.po.bucket;
-
-/**
- * @author reghao
- * @date 2022-11-22 14:26:57
- */
-public class Rule {
-    private String id;
-    private Filter filter;
-    private String status;
-    private Expiration expiration;
-    private Transition transition;
-}

+ 0 - 10
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/bucket/Transition.java

@@ -1,10 +0,0 @@
-package cn.reghao.dfs.store.model.po.bucket;
-
-/**
- * @author reghao
- * @date 2022-11-22 14:28:15
- */
-public class Transition {
-    private int days;
-    private String storageClass;
-}

+ 1 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/CompleteMultipartUpload.java → dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/CompleteMultipartUpload.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.vo;
+package cn.reghao.dfs.store.model.s3;
 
 import lombok.Getter;
 import lombok.NoArgsConstructor;

+ 1 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/CompleteMultipartUploadResult.java → dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/CompleteMultipartUploadResult.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.vo;
+package cn.reghao.dfs.store.model.s3;
 
 import lombok.AllArgsConstructor;
 import lombok.NoArgsConstructor;

+ 1 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/Contents.java → dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/Contents.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.vo;
+package cn.reghao.dfs.store.model.s3;
 
 import lombok.Getter;
 import lombok.NoArgsConstructor;

+ 1 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/InitiateMultipartUploadResult.java → dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/InitiateMultipartUploadResult.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.vo;
+package cn.reghao.dfs.store.model.s3;
 
 import lombok.AllArgsConstructor;
 import lombok.NoArgsConstructor;

+ 1 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/Initiator.java → dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/Initiator.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.vo;
+package cn.reghao.dfs.store.model.s3;
 
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;

+ 1 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/ListPartsResult.java → dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/ListPartsResult.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.vo;
+package cn.reghao.dfs.store.model.s3;
 
 import lombok.Setter;
 

+ 1 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/Owner.java → dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/Owner.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.vo;
+package cn.reghao.dfs.store.model.s3;
 
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;

+ 1 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/Part.java → dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/Part.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.vo;
+package cn.reghao.dfs.store.model.s3;
 
 import lombok.Getter;
 import lombok.NoArgsConstructor;

+ 1 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/PostResponse.java → dfs-store/src/main/java/cn/reghao/dfs/store/model/s3/PostResponse.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.vo;
+package cn.reghao.dfs.store.model.s3;
 
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;

+ 0 - 15
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/Delete.java

@@ -1,15 +0,0 @@
-package cn.reghao.dfs.store.model.vo;
-
-import javax.xml.bind.annotation.XmlElement;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2022-12-09 16:58:03
- */
-public class Delete {
-    @XmlElement(name = "Quiet")
-    private boolean quiet;
-    private String key;
-    private List<Object> objects;
-}

+ 0 - 12
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/DeleteResult.java

@@ -1,12 +0,0 @@
-package cn.reghao.dfs.store.model.vo;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-
-/**
- * @author reghao
- * @date 2022-12-09 16:53:30
- */
-@XmlRootElement(name = "DeleteResult")
-public class DeleteResult {
-}

+ 0 - 9
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/Deleted.java

@@ -1,9 +0,0 @@
-package cn.reghao.dfs.store.model.vo;
-
-/**
- * @author reghao
- * @date 2022-12-09 16:56:34
- */
-public class Deleted {
-    private String key;
-}

+ 0 - 11
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/Error.java

@@ -1,11 +0,0 @@
-package cn.reghao.dfs.store.model.vo;
-
-/**
- * @author reghao
- * @date 2022-12-09 16:55:43
- */
-public class Error {
-    private String key;
-    private String code;
-    private String message;
-}

+ 0 - 44
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/ListBucketResult.java

@@ -1,44 +0,0 @@
-package cn.reghao.dfs.store.model.vo;
-
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2022-12-08 11:05:52
- */
-@NoArgsConstructor
-@Getter
-@Setter
-@XmlRootElement(name = "ListBucketResult")
-@XmlAccessorType(XmlAccessType.FIELD)
-public class ListBucketResult {
-    @XmlElement(name = "Name")
-    private String name;
-    @XmlElement(name = "Prefix")
-    private String prefix;
-    @XmlElement(name = "KeyCount")
-    private int keyCount;
-    @XmlElement(name = "MaxKeys")
-    private int maxKeys;
-    @XmlElement(name = "IsTruncated")
-    private boolean isTruncated;
-    @XmlElement(name = "Contents")
-    private List<Contents> contents;
-
-    public ListBucketResult(int keyCount, int maxKeys, List<Contents> contents) {
-        this.name = "tnb";
-        this.prefix = "/";
-        this.keyCount = keyCount;
-        this.maxKeys = maxKeys;
-        this.isTruncated = false;
-        this.contents = contents;
-    }
-}

+ 0 - 9
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/Object.java

@@ -1,9 +0,0 @@
-package cn.reghao.dfs.store.model.vo;
-
-/**
- * @author reghao
- * @date 2022-12-09 16:59:27
- */
-public class Object {
-    private String key;
-}

+ 0 - 12
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/service/Bucket.java

@@ -1,12 +0,0 @@
-package cn.reghao.dfs.store.model.vo.service;
-
-import java.time.LocalDateTime;
-
-/**
- * @author reghao
- * @date 2022-11-21 17:31:12
- */
-public class Bucket {
-    private String name;
-    private LocalDateTime creationDate;
-}

+ 0 - 14
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/service/ListAllMyBucketsResult.java

@@ -1,14 +0,0 @@
-package cn.reghao.dfs.store.model.vo.service;
-
-import cn.reghao.dfs.store.model.vo.Owner;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2022-11-21 17:32:16
- */
-public class ListAllMyBucketsResult {
-    private Owner owner;
-    private List<Bucket> buckets;
-}

+ 0 - 71
dfs-store/src/main/java/cn/reghao/dfs/store/rpc/BucketServiceImpl.java

@@ -1,71 +0,0 @@
-package cn.reghao.dfs.store.rpc;
-
-import cn.reghao.dfs.api.dto.BucketInfo;
-import cn.reghao.dfs.api.dto.BucketListResult;
-import cn.reghao.dfs.api.dto.BucketRegion;
-import cn.reghao.dfs.api.dto.CreateBucket;
-import cn.reghao.dfs.api.iface.BucketService;
-import cn.reghao.dfs.store.db.mapper.BucketMapper;
-import cn.reghao.dfs.store.db.mapper.RegionMapper;
-import cn.reghao.dfs.store.model.po.Bucket;
-import org.apache.dubbo.config.annotation.DubboService;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2022-08-05 15:04:19
- */
-@DubboService
-@Service
-public class BucketServiceImpl implements BucketService {
-    private final RegionMapper regionMapper;
-    private final BucketMapper bucketMapper;
-
-    public BucketServiceImpl(RegionMapper regionMapper, BucketMapper bucketMapper) {
-        this.regionMapper = regionMapper;
-        this.bucketMapper = bucketMapper;
-    }
-
-    @Override
-    public boolean exist(String region, String bucketName) {
-        Bucket bucket = bucketMapper.findByName(bucketName);
-        return bucket == null;
-    }
-
-    @Override
-    public void create(CreateBucket createBucket) {
-        String region = createBucket.getRegion();
-        String bucketName = createBucket.getBucket();
-        String storageClass = createBucket.getStorage();
-        String acl = createBucket.getAcl();
-
-        Integer regionId = regionMapper.findIdByLocation(region);
-        if (regionId == null) {
-            return;
-        }
-
-        Bucket bucket = bucketMapper.findByName(bucketName);
-        if (bucket == null) {
-            bucket = new Bucket();
-            bucket.setRegionId(regionId);
-            bucket.setName(bucketName);
-            bucket.setStorage(storageClass);
-            bucket.setAcl(acl);
-            bucketMapper.save(bucket);
-        }
-    }
-
-    @Override
-    public BucketListResult list() {
-        List<BucketInfo> list = bucketMapper.findBucketInfo();
-        BucketListResult bucketListResult = new BucketListResult(list);
-        return bucketListResult;
-    }
-
-    @Override
-    public List<BucketRegion> getBucketRegions() {
-        return bucketMapper.findAll1();
-    }
-}

+ 175 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/rpc/FileServiceImpl.java

@@ -0,0 +1,175 @@
+package cn.reghao.dfs.store.rpc;
+
+import cn.reghao.dfs.api.dto.DeleteFile;
+import cn.reghao.dfs.api.dto.DirProp;
+import cn.reghao.dfs.api.dto.FileInfoVO;
+import cn.reghao.dfs.api.dto.FileProp;
+import cn.reghao.dfs.api.iface.FileService;
+import cn.reghao.dfs.store.db.mapper.FileMetaMapper;
+import cn.reghao.dfs.store.model.po.FileMeta;
+import cn.reghao.dfs.store.service.PutObjectService;
+import cn.reghao.jutil.jdk.db.Page;
+import cn.reghao.jutil.jdk.db.PageList;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.stereotype.Service;
+
+import java.io.ByteArrayInputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * @author reghao
+ * @date 2023-05-18 20:39:45
+ */
+@Slf4j
+@DubboService
+@Service
+public class FileServiceImpl implements FileService {
+    private PutObjectService putObjectService;
+    private final FileMetaMapper fileMetaMapper;
+    private final int pageSize = 10;
+
+    public FileServiceImpl(PutObjectService putObjectService, FileMetaMapper fileMetaMapper) {
+        this.fileMetaMapper = fileMetaMapper;
+        this.putObjectService = putObjectService;
+    }
+
+    @Override
+    public PageList<FileInfoVO> getFileList(String pid, int pageNumber) {
+        Page page = new Page(pageNumber, pageSize);
+        int total = fileMetaMapper.countByPid(pid);
+        List<FileInfoVO> list = fileMetaMapper.findFileInfoByPage(page, pid);
+        PageList<FileInfoVO> pageList = PageList.pageList(pageNumber, pageSize, total, list);
+        return pageList;
+    }
+
+    @Override
+    public PageList<FileInfoVO> getFileCard(String pid, int pageNumber) {
+        Page page = new Page(pageNumber, pageSize);
+        int total = fileMetaMapper.countByPid(pid);
+        List<FileInfoVO> list = fileMetaMapper.findFileInfo1ByPage(page, pid);
+        PageList<FileInfoVO> pageList = PageList.pageList(pageNumber, pageSize, total, list);
+        return pageList;
+    }
+
+    @Override
+    public List<FileInfoVO> getDirectories(String pid) {
+        List<FileInfoVO> list = fileMetaMapper.findDirectories(pid);
+        return list;
+    }
+
+    @Override
+    public PageList<DeleteFile> getTrashList(int pageNumber, int pageSize) {
+        int total = fileMetaMapper.countDeletedFiles();
+        Page page = new Page(pageNumber, pageSize);
+        List<DeleteFile> list = fileMetaMapper.findDeletedFileByPage(page);
+        PageList<DeleteFile> pageList = PageList.pageList(pageNumber, pageSize, total, list);
+        return pageList;
+    }
+
+    @Override
+    public String checkFilename(String pid, String filename) {
+        List<FileMeta> list = fileMetaMapper.findByFilename(pid, filename);
+        if (!list.isEmpty()) {
+            filename += list.size();
+        }
+        return filename;
+    }
+
+    @Override
+    public void createDirectory(String pid, String filename) {
+        String filename1 = checkFilename(pid, filename);
+        String fileId = UUID.randomUUID().toString().replace("-", "");
+        String objectName = "";
+        FileMeta fileMeta = new FileMeta(pid, fileId, objectName, filename1);
+        //fileMetaMapper.save(fileInfo);
+    }
+
+    @Override
+    public String createFile(String pid, String filename, String content) {
+        String fileId = UUID.randomUUID().toString().replace("-", "");
+        String objectName = "";
+        byte[] bytes = content.getBytes(StandardCharsets.UTF_8);
+        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
+        //putObjectService.putObject(objectName, bais, bytes.length);
+        return fileId;
+    }
+
+    @Override
+    public void copyFile(List<String> fileIds, String toPid) {
+        List<FileMeta> list = fileMetaMapper.findFileInfos(fileIds);
+    }
+
+    @Override
+    public void moveFile(List<String> fileIds, String toPid) {
+        List<FileMeta> list = fileMetaMapper.findFileInfos(fileIds);
+        list.forEach(fileInfo -> {
+            fileMetaMapper.updateParent(fileInfo.getObjectId(), toPid);
+        });
+    }
+
+    @Override
+    public void renameFile(String fileId, String newFilename) {
+        FileMeta fileMeta = fileMetaMapper.findByObjectId(fileId);
+        String pid = fileMeta.getPid();
+        String filename1 = checkFilename(pid, newFilename);
+        fileMetaMapper.updateFilename(fileId, filename1);
+    }
+
+    @Override
+    public void deleteFiles(List<String> fileIds) {
+        fileIds.forEach(fileMetaMapper::updateSetDelete);
+    }
+
+    public void deleteFiles1(List<String> objectIds) {
+        log.info("物理删除文件...");
+    }
+
+    @Override
+    public FileProp getFileProp(String fileId) {
+        FileMeta fileMeta = fileMetaMapper.findByObjectId(fileId);
+        String pid = fileMeta.getPid();
+        String path = "";
+
+        String filename = fileMeta.getFilename();
+        long size = fileMeta.getSize();
+        String contentType = fileMeta.getContentType();
+        String sha256sum = fileMeta.getSha256sum();
+        String url = String.format("https://file.reghao.cn/%s", fileMeta.getObjectName());
+        return new FileProp(path, filename, size, contentType, sha256sum, url);
+    }
+
+    @Override
+    public DirProp getDirProp(String fileId) {
+        // 当前目录下的文件和子目录
+        List<FileMeta> list = fileMetaMapper.findByPid(fileId);
+        DirProp dirProp = getDirProp(list);
+        return dirProp;
+    }
+
+    private DirProp getDirProp(List<FileMeta> list) {
+        long totalSize = 0;
+        long totalDirs = list.stream().filter(fileInfo -> fileInfo.getFileType() == 1000).count();
+        long totalFiles = list.stream().filter(fileInfo -> fileInfo.getFileType() != 1000).count();
+        for (FileMeta fileMeta : list) {
+            int fileType = fileMeta.getFileType();
+            if (fileType != 1000) {
+                totalSize += fileMeta.getSize();
+            } else {
+                // getDirProp(fileInfo.getFileId());
+            }
+        }
+        return new DirProp(totalDirs, totalFiles, totalSize);
+    }
+
+    @Override
+    public PageList<FileInfoVO> search(String keyword, int pageNumber) {
+        Page page = new Page(pageNumber, pageSize);
+        int total = fileMetaMapper.countByKeyword(keyword);
+        List<FileInfoVO> list = fileMetaMapper.findKeywordByPage(page, keyword);
+        PageList<FileInfoVO> pageList = PageList.pageList(pageNumber, pageSize, total, list);
+        return pageList;
+    }
+}

+ 0 - 147
dfs-store/src/main/java/cn/reghao/dfs/store/rpc/ObjectServiceImpl.java

@@ -1,147 +0,0 @@
-package cn.reghao.dfs.store.rpc;
-
-import cn.reghao.dfs.api.dto.*;
-import cn.reghao.dfs.api.dto.object.GenerateSignedUrl;
-import cn.reghao.dfs.api.dto.object.GenerateSignedUrlResult;
-import cn.reghao.dfs.api.iface.ObjectService;
-import cn.reghao.dfs.store.db.mapper.FileMetaMapper;
-import cn.reghao.dfs.store.db.mapper.FileTypeMapper;
-import cn.reghao.dfs.store.model.po.FileMeta;
-import cn.reghao.jutil.jdk.converter.DateTimeConverter;
-import cn.reghao.jutil.tool.id.IdGenerator;
-import org.apache.dubbo.config.annotation.DubboService;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2023-01-09 15:35:42
- */
-@DubboService
-@Service
-public class ObjectServiceImpl implements ObjectService {
-    private final FileMetaMapper fileMetaMapper;
-    private final FileTypeMapper fileTypeMapper;
-    private final IdGenerator objectIdGenerator;
-
-    public ObjectServiceImpl(FileMetaMapper fileMetaMapper, FileTypeMapper fileTypeMapper) {
-        this.fileMetaMapper = fileMetaMapper;
-        this.fileTypeMapper = fileTypeMapper;
-        this.objectIdGenerator = new IdGenerator(32, "object-id");
-    }
-
-    @Override
-    public List<FileIcon> getFileIcons() {
-        List<FileIcon> list = fileTypeMapper.findAll1();
-        return list;
-    }
-
-    @Override
-    public GetObjectsResult list(GetObjects getObjects) {
-        String region = getObjects.getRegion();
-        String bucket = getObjects.getBucket();
-        String prefix = getObjects.getPrefix();
-        String startAfter = getObjects.getMarker();
-        String delimiter = getObjects.getDelimiter();
-        Integer maxKeys = getObjects.getMaxKeys();
-
-        int count = fileMetaMapper.count();
-        List<FileMeta> list;
-        StringBuilder regex = new StringBuilder();
-        regex.append("^").append(prefix).append("([^/])+/?$");
-        if (startAfter.isBlank()) {
-            list = fileMetaMapper.findAll0(bucket, maxKeys, regex.toString());
-        } else {
-            list = fileMetaMapper.findAll2(bucket, prefix, startAfter, maxKeys);
-        }
-
-        List<ObjectJson> list1 = list.stream().map(fileMeta -> {
-            ObjectJson objectJson = new ObjectJson();
-            Integer fileTypeId = fileMeta.getFileTypeId();
-            objectJson.setDir(fileTypeId == 1000);
-
-            String objectName = fileMeta.getObjectName();
-            String[] names = objectName.split("/");
-            String name = names[names.length-1];
-            objectJson.setName(name);
-            objectJson.setPath(objectName);
-            long size = fileMeta.getSize();
-            objectJson.setSize(size);
-            objectJson.setFormattedSize(String.valueOf(size));
-            objectJson.setObjectType("Normal");
-            objectJson.setType(fileTypeId);
-            objectJson.setStorageClass("Standard");
-            objectJson.setTimeModified(DateTimeConverter.msTimestamp(fileMeta.getUpdateTime()));
-            return objectJson;
-        }).collect(Collectors.toList());
-
-        GetObjectsResult getObjectsResult = new GetObjectsResult();
-        getObjectsResult.setObjectList(list1);
-        getObjectsResult.setBucketName(bucket);
-        getObjectsResult.setDelimiter(delimiter);
-        getObjectsResult.setMaxKeys(maxKeys);
-        getObjectsResult.setObjectSize(0L);
-        getObjectsResult.setTruncated(true);
-        return getObjectsResult;
-    }
-
-    @Override
-    public void createFolder(CreateFolder createFolder) {
-        String objectName = createFolder.getObjectName();
-        List<String> objectNames = new ArrayList<>();
-        String[] names = objectName.split("/");
-        for (int i = 0; i < names.length; i++) {
-            if (i == 0) {
-                objectNames.add(names[i] + "/");
-            } else {
-                String tmp = objectNames.get(i-1) + names[i] + "/";
-                objectNames.add(tmp);
-            }
-        }
-
-        FileMeta fileMeta;
-        int i = 0;
-        for (; i < objectNames.size(); i++) {
-            fileMeta = fileMetaMapper.findByObjectName(objectNames.get(i));
-            if (fileMeta == null) {
-                break;
-            }
-        }
-
-        List<FileMeta> list = new ArrayList<>();
-        for (int j = i; j < objectNames.size(); j++) {
-            String objectName1 = objectNames.get(j);
-            String objectId = objectIdGenerator.stringId();
-            String[] names1 = objectName1.split("/");
-            String filename = names1[names1.length-1];
-            list.add(new FileMeta(objectName1));
-        }
-
-        if (!list.isEmpty()) {
-            fileMetaMapper.saveAll(list);
-        }
-    }
-
-    @Override
-    public HeadObjectResult head(HeadObject headObject) {
-        String objectName = headObject.getObjectName();
-        HeadObjectResult headObjectResult = fileMetaMapper.findByObjectName1(objectName);
-        return headObjectResult;
-    }
-
-    @Override
-    public GenerateSignedUrlResult getSignedUrl(GenerateSignedUrl generateSignedUrl) {
-        String objectName = generateSignedUrl.getObjectName();
-        String url = String.format("//oss.reghao.cn/%s", objectName);
-        // 5 分钟后链接失效
-        long expires = System.currentTimeMillis()/1000 + 300;
-        String ossAccessId = "TMP.3KeSkQJhXm4fZNupmzTEFx8HQ7QobdYnbc4A5do6zvqDnkkHdwyKj2rvJzPCfprxBSfHM6H3tqci21rCnHwWEmVje3PHaA";
-        String signature = "C1NieNpY%2FrmgaHNM2PXTPU3Tshw%3D";
-        String param = String.format("Expires=%s&OSSAccessId=%s&Signature=%s", expires, ossAccessId, signature);
-
-        return new GenerateSignedUrlResult(url, param);
-    }
-}

+ 26 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/rpc/OssServiceImpl.java

@@ -0,0 +1,26 @@
+package cn.reghao.dfs.store.rpc;
+
+import cn.reghao.dfs.store.db.mapper.FileMetaMapper;
+
+/**
+ * @author reghao
+ * @date 2023-01-09 15:35:42
+ */
+public class OssServiceImpl {
+    private FileMetaMapper fileMetaMapper;
+
+    public void list() {
+        String bucket = "";
+        String prefix = "abc/d/";
+        String startAfter = "abc/d/e";
+        Integer maxKeys = 10;
+
+        StringBuilder regex = new StringBuilder();
+        regex.append("^").append(prefix).append("([^/])+/?$");
+        if (startAfter.isBlank()) {
+            fileMetaMapper.findAll0(bucket, maxKeys, regex.toString());
+        } else {
+            fileMetaMapper.findAll2(bucket, prefix, startAfter, maxKeys);
+        }
+    }
+}

+ 0 - 28
dfs-store/src/main/java/cn/reghao/dfs/store/rpc/RegionServiceImpl.java

@@ -1,28 +0,0 @@
-package cn.reghao.dfs.store.rpc;
-
-import cn.reghao.dfs.api.dto.KeyValue;
-import cn.reghao.dfs.api.iface.RegionService;
-import cn.reghao.dfs.store.db.mapper.RegionMapper;
-import org.apache.dubbo.config.annotation.DubboService;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2023-01-09 16:07:15
- */
-@DubboService
-@Service
-public class RegionServiceImpl implements RegionService {
-    private RegionMapper regionMapper;
-
-    public RegionServiceImpl(RegionMapper regionMapper) {
-        this.regionMapper = regionMapper;
-    }
-
-    public List<KeyValue> list() {
-        List<KeyValue> list = regionMapper.findKeyValues();
-        return list;
-    }
-}

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

@@ -1,50 +0,0 @@
-package cn.reghao.dfs.store.service;
-
-import cn.reghao.dfs.store.db.mapper.FileMetaMapper;
-import cn.reghao.dfs.store.model.dto.GetBucket;
-import cn.reghao.dfs.store.model.po.FileMeta;
-import cn.reghao.dfs.store.model.vo.Contents;
-import cn.reghao.dfs.store.model.vo.ListBucketResult;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDateTime;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * @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 ListBucketResult list(GetBucket getBucket) {
-        int listType = getBucket.getListType();
-        String prefix = getBucket.getPrefix();
-        String startAfter = getBucket.getStartAfter();
-        String delimiter = getBucket.getDelimiter();
-        Integer maxKeys = getBucket.getMaxKeys();
-
-        int count = fileMetaMapper.count();
-        List<FileMeta> list;
-        if (startAfter.isBlank()) {
-            list = fileMetaMapper.findAll1("", prefix, maxKeys);
-        } else {
-            list = fileMetaMapper.findAll2("", prefix, startAfter, maxKeys);
-        }
-        List<Contents> list1 = list.stream().map(fileMeta -> {
-            String key = fileMeta.getObjectName();
-            LocalDateTime lastModified = fileMeta.getUpdateTime();
-            String eTag = fileMeta.getSha256sum();
-            long size = fileMeta.getSize();
-            return new Contents(key, lastModified, eTag, size);
-        }).collect(Collectors.toList());
-
-        return new ListBucketResult(list1.size(), count, list1);
-    }
-}

+ 3 - 10
dfs-store/src/main/java/cn/reghao/dfs/store/service/FileUrlService.java

@@ -1,6 +1,5 @@
 package cn.reghao.dfs.store.service;
 
-import cn.reghao.dfs.store.config.DfsProperties;
 import cn.reghao.dfs.store.util.store.LoadBalancer;
 import cn.reghao.dfs.store.util.store.StoreDir;
 import org.springframework.stereotype.Service;
@@ -12,22 +11,16 @@ import org.springframework.stereotype.Service;
 @Service
 @Deprecated
 public class FileUrlService {
-    private final String domain;
-    private final int group;
-    private final int node;
     private final LoadBalancer loadBalancer;
     
-    public FileUrlService(DfsProperties dfsProperties, LoadBalancer loadBalancer) {
-        this.domain = dfsProperties.getDomain();
-        this.group = dfsProperties.getGroup();
-        this.node = dfsProperties.getNode();
+    public FileUrlService(LoadBalancer loadBalancer) {
         this.loadBalancer = loadBalancer;
     }
 
-    public String genFilePath(long size, String objectId, String suffix) {
+    public String genFilePath(String contentId, long size) {
         //StoreDir storeDir = loadBalancer.getStoreDir(size, sha256sum);
         StoreDir storeDir = loadBalancer.getStoreDir(size);
         String fileDir = storeDir.getAbsoluteDirPath();
-        return String.format("%s/%s.%s", fileDir, objectId, suffix);
+        return String.format("%s/%s", fileDir, contentId);
     }
 }

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików