Browse Source

package 名字暂时不和 tnb 脱离

reghao 4 years ago
parent
commit
8842862910
93 changed files with 604 additions and 283 deletions
  1. 48 34
      pom.xml
  2. 0 11
      src/main/java/cn/reghao/dfs/store/DfsStoreApplication.java
  3. 0 36
      src/main/java/cn/reghao/dfs/store/controller/VideoFileController.java
  4. 15 0
      src/main/java/cn/reghao/tnb/file/app/FileApplication.java
  5. 1 1
      src/main/java/cn/reghao/tnb/file/app/config/BaseDocument.java
  6. 1 1
      src/main/java/cn/reghao/tnb/file/app/config/ConfigMap.java
  7. 1 1
      src/main/java/cn/reghao/tnb/file/app/config/DfsConfig.java
  8. 1 1
      src/main/java/cn/reghao/tnb/file/app/config/DfsProperties.java
  9. 1 1
      src/main/java/cn/reghao/tnb/file/app/config/PathUrl.java
  10. 2 2
      src/main/java/cn/reghao/tnb/file/app/config/SwaggerConfig.java
  11. 2 2
      src/main/java/cn/reghao/tnb/file/app/config/WebConfig.java
  12. 4 3
      src/main/java/cn/reghao/tnb/file/app/controller/FileAutoController.java
  13. 1 1
      src/main/java/cn/reghao/tnb/file/app/controller/FileController.java
  14. 3 3
      src/main/java/cn/reghao/tnb/file/app/controller/FileDownloadController.java
  15. 4 4
      src/main/java/cn/reghao/tnb/file/app/controller/FileUploadController.java
  16. 5 4
      src/main/java/cn/reghao/tnb/file/app/controller/MediaUploadController.java
  17. 57 0
      src/main/java/cn/reghao/tnb/file/app/controller/VideoFileController.java
  18. 4 3
      src/main/java/cn/reghao/tnb/file/app/db/mapper/FileInfoMapper.java
  19. 6 3
      src/main/java/cn/reghao/tnb/file/app/db/mapper/FileUrlMapper.java
  20. 4 4
      src/main/java/cn/reghao/tnb/file/app/db/mapper/FileUserMapper.java
  21. 2 2
      src/main/java/cn/reghao/tnb/file/app/db/mapper/ImageFileMapper.java
  22. 2 2
      src/main/java/cn/reghao/tnb/file/app/db/mapper/VideoFileMapper.java
  23. 15 14
      src/main/java/cn/reghao/tnb/file/app/db/repository/FileRepository.java
  24. 3 2
      src/main/java/cn/reghao/tnb/file/app/inerceptor/StaticFileInterceptor.java
  25. 32 0
      src/main/java/cn/reghao/tnb/file/app/inerceptor/UserContextFiler.java
  26. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/dto/DownloadFile.java
  27. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/dto/FileDto.java
  28. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/dto/FileInfoDto.java
  29. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/dto/FileUrlDto.java
  30. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/dto/ImgFileRetDto.java
  31. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/dto/UploadFile.java
  32. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/dto/UploadFilePart.java
  33. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/dto/UploadFilePartRet.java
  34. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/dto/UploadFileRet.java
  35. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/dto/UploadPrepare.java
  36. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/dto/UploadPrepareRet.java
  37. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/dto/VidFileRetDto.java
  38. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/dto/VidFileSbtDto.java
  39. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/dto/auto/VideoFileDto.java
  40. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/po/AudioFile.java
  41. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/po/FileInfo.java
  42. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/po/FileUrl.java
  43. 1 1
      src/main/java/cn/reghao/tnb/file/app/model/po/FileUser.java
  44. 2 2
      src/main/java/cn/reghao/tnb/file/app/model/po/ImageFile.java
  45. 2 2
      src/main/java/cn/reghao/tnb/file/app/model/po/VideoFile.java
  46. 4 4
      src/main/java/cn/reghao/tnb/file/app/rpc/FileInfoServiceImpl.java
  47. 13 13
      src/main/java/cn/reghao/tnb/file/app/rpc/VideoFileServiceImpl.java
  48. 14 15
      src/main/java/cn/reghao/tnb/file/app/service/FileAutoService.java
  49. 1 1
      src/main/java/cn/reghao/tnb/file/app/service/FileContentType.java
  50. 5 5
      src/main/java/cn/reghao/tnb/file/app/service/FileDownloadService.java
  51. 1 1
      src/main/java/cn/reghao/tnb/file/app/service/FileHeader.java
  52. 1 1
      src/main/java/cn/reghao/tnb/file/app/service/FileSignatures.java
  53. 1 1
      src/main/java/cn/reghao/tnb/file/app/service/FileStoreService.java
  54. 1 1
      src/main/java/cn/reghao/tnb/file/app/service/FileTypeService.java
  55. 7 8
      src/main/java/cn/reghao/tnb/file/app/service/FileUploadService.java
  56. 4 4
      src/main/java/cn/reghao/tnb/file/app/service/FileUrlService.java
  57. 1 1
      src/main/java/cn/reghao/tnb/file/app/service/RedisKey.java
  58. 1 1
      src/main/java/cn/reghao/tnb/file/app/service/media/AudioFileService.java
  59. 8 8
      src/main/java/cn/reghao/tnb/file/app/service/media/ImageFileService.java
  60. 7 8
      src/main/java/cn/reghao/tnb/file/app/service/media/VideoFileService.java
  61. 1 1
      src/main/java/cn/reghao/tnb/file/app/service/part/TmpFile.java
  62. 2 1
      src/main/java/cn/reghao/tnb/file/app/service/part/WholeFile.java
  63. 1 1
      src/main/java/cn/reghao/tnb/file/app/util/FileLifecycle.java
  64. 1 1
      src/main/java/cn/reghao/tnb/file/app/util/HertubePrefix.java
  65. 2 2
      src/main/java/cn/reghao/tnb/file/app/util/LoadBalancer.java
  66. 1 1
      src/main/java/cn/reghao/tnb/file/app/util/ServletUtil.java
  67. 1 1
      src/main/java/cn/reghao/tnb/file/app/util/StringUtil.java
  68. 1 1
      src/main/java/cn/reghao/tnb/file/app/util/UserContext.java
  69. 1 1
      src/main/java/cn/reghao/tnb/file/app/util/WebResult.java
  70. 2 1
      src/main/java/cn/reghao/tnb/file/app/util/image/Captcha.java
  71. 1 1
      src/main/java/cn/reghao/tnb/file/app/util/image/ImageUtil.java
  72. 1 1
      src/main/java/cn/reghao/tnb/file/app/util/image/QrCode.java
  73. 110 0
      src/main/java/cn/reghao/tnb/file/app/util/jwt/Jwt.java
  74. 28 0
      src/main/java/cn/reghao/tnb/file/app/util/jwt/JwtPayload.java
  75. 1 1
      src/main/java/cn/reghao/tnb/file/app/util/media/ImageOps.java
  76. 1 1
      src/main/java/cn/reghao/tnb/file/app/util/media/VideoOps.java
  77. 1 1
      src/main/java/cn/reghao/tnb/file/app/util/redis/RedisConfig.java
  78. 1 1
      src/main/java/cn/reghao/tnb/file/app/util/redis/RedisKeys.java
  79. 1 1
      src/main/java/cn/reghao/tnb/file/app/util/redis/ds/RedisHash.java
  80. 1 1
      src/main/java/cn/reghao/tnb/file/app/util/redis/ds/RedisKey.java
  81. 1 1
      src/main/java/cn/reghao/tnb/file/app/util/redis/ds/RedisList.java
  82. 1 1
      src/main/java/cn/reghao/tnb/file/app/util/redis/ds/RedisSet.java
  83. 1 1
      src/main/java/cn/reghao/tnb/file/app/util/redis/ds/RedisString.java
  84. 9 9
      src/main/resources/application-dev.yml
  85. 25 0
      src/main/resources/application-dev1.yml
  86. 25 0
      src/main/resources/application-test.yml
  87. 5 6
      src/main/resources/application.yml
  88. 7 4
      src/main/resources/mapper/FileInfoMapper.xml
  89. 5 2
      src/main/resources/mapper/FileUrlMapper.xml
  90. 4 4
      src/main/resources/mapper/FileUserMapper.xml
  91. 3 3
      src/main/resources/mapper/ImageFileMapper.xml
  92. 3 3
      src/main/resources/mapper/VideoFileMapper.xml
  93. 51 1
      src/test/java/FileTest.java

+ 48 - 34
pom.xml

@@ -2,23 +2,27 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>file</artifactId>
+        <groupId>cn.reghao.tnb</groupId>
+        <version>1.0.0</version>
+    </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <groupId>cn.reghao.dfs</groupId>
-    <artifactId>dfs-store</artifactId>
-    <version>1.0.0</version>
-
-    <properties>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
-    </properties>
+    <groupId>cn.reghao.tnb.file</groupId>
+    <artifactId>file-service</artifactId>
 
-    <parent>
-        <groupId>org.springframework.boot</groupId>
-        <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.3.8.RELEASE</version>
-        <relativePath/> <!-- lookup parent from repository -->
-    </parent>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>2.3.9.RELEASE</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
 
     <dependencies>
         <dependency>
@@ -32,11 +36,28 @@
             <version>1.0.0-SNAPSHOT</version>
         </dependency>
         <dependency>
-            <groupId>cn.reghao.dfs</groupId>
-            <artifactId>dfs-api</artifactId>
+            <groupId>cn.reghao.tnb.file</groupId>
+            <artifactId>file-api</artifactId>
             <version>1.0.0-SNAPSHOT</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.6</version>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-core</artifactId>
+            <version>1.2.3</version>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>1.2.3</version>
+        </dependency>
+
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
@@ -49,6 +70,11 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
 
         <dependency>
             <groupId>org.apache.dubbo</groupId>
@@ -65,7 +91,6 @@
             <artifactId>curator-recipes</artifactId>
             <version>4.0.1</version>
         </dependency>
-
         <dependency>
             <groupId>org.apache.zookeeper</groupId>
             <artifactId>zookeeper</artifactId>
@@ -94,6 +119,12 @@
             <version>3.3.1</version>
         </dependency>
 
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt</artifactId>
+            <version>0.9.1</version>
+        </dependency>
+
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
@@ -141,23 +172,6 @@
             <artifactId>micrometer-registry-prometheus</artifactId>
             <scope>runtime</scope>
         </dependency>
-
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-            <version>1.18.0</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-core</artifactId>
-            <version>1.2.3</version>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>1.2.3</version>
-        </dependency>
     </dependencies>
 
     <profiles>

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

@@ -1,11 +0,0 @@
-package cn.reghao.dfs.store;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication
-public class DfsStoreApplication {
-    public static void main(String[] args) {
-        SpringApplication.run(DfsStoreApplication.class, args);
-    }
-}

+ 0 - 36
src/main/java/cn/reghao/dfs/store/controller/VideoFileController.java

@@ -1,36 +0,0 @@
-package cn.reghao.dfs.store.controller;
-
-import io.swagger.annotations.ApiOperation;
-import org.springframework.core.io.InputStreamResource;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.io.FileInputStream;
-
-/**
- * @author reghao
- * @date 2022-04-24 16:13:10
- */
-@RestController
-@RequestMapping("/api/file/video")
-public class VideoFileController {
-    @ApiOperation("检查视频文件是否已存在")
-    @GetMapping("/file")
-    public ResponseEntity<InputStreamResource> isFileExist(@RequestParam("videoId") String videoId) throws Exception {
-        FileInputStream fis = new FileInputStream("/home/reghao/Downloads/mp4/test/0");
-        InputStreamResource inputStreamResource = new InputStreamResource(fis);
-
-        HttpHeaders httpHeaders = new HttpHeaders();
-        httpHeaders.set("Pragma", "No-cache");
-        httpHeaders.set("Cache-Control", "no-cache");
-        return ResponseEntity.status(HttpStatus.PARTIAL_CONTENT)
-                .headers(httpHeaders).contentType(MediaType.parseMediaType("video/mp4"))
-                .body(inputStreamResource);
-    }
-}

+ 15 - 0
src/main/java/cn/reghao/tnb/file/app/FileApplication.java

@@ -0,0 +1,15 @@
+package cn.reghao.tnb.file.app;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+@SpringBootApplication
+@ComponentScan({"cn.reghao.tnb.file.app", "cn.reghao.tnb.file.util","cn.reghao.tnb.common"})
+//@EnableTransactionManagement
+public class FileApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(FileApplication.class, args);
+    }
+}

+ 1 - 1
src/main/java/cn/reghao/dfs/store/config/BaseDocument.java → src/main/java/cn/reghao/tnb/file/app/config/BaseDocument.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.config;
+package cn.reghao.tnb.file.app.config;
 
 import lombok.Data;
 import org.springframework.data.annotation.Id;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/config/ConfigMap.java → src/main/java/cn/reghao/tnb/file/app/config/ConfigMap.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.config;
+package cn.reghao.tnb.file.app.config;
 
 import java.util.ArrayList;
 import java.util.HashMap;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/config/DfsConfig.java → src/main/java/cn/reghao/tnb/file/app/config/DfsConfig.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.config;
+package cn.reghao.tnb.file.app.config;
 
 /**
  * @author reghao

+ 1 - 1
src/main/java/cn/reghao/dfs/store/config/DfsProperties.java → src/main/java/cn/reghao/tnb/file/app/config/DfsProperties.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.config;
+package cn.reghao.tnb.file.app.config;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/config/PathUrl.java → src/main/java/cn/reghao/tnb/file/app/config/PathUrl.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.config;
+package cn.reghao.tnb.file.app.config;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;

+ 2 - 2
src/main/java/cn/reghao/dfs/store/config/SwaggerConfig.java → src/main/java/cn/reghao/tnb/file/app/config/SwaggerConfig.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.config;
+package cn.reghao.tnb.file.app.config;
 
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -27,7 +27,7 @@ public class SwaggerConfig {
         return new Docket(DocumentationType.SWAGGER_2)
                 .apiInfo(apiInfo())
                 .select()
-                .apis(RequestHandlerSelectors.basePackage("cn.reghao.dfs.store.controller"))
+                .apis(RequestHandlerSelectors.basePackage("cn.reghao.tnb.file.app.controller"))
                 .paths(PathSelectors.any())
                 .build();
     }

+ 2 - 2
src/main/java/cn/reghao/dfs/store/config/WebConfig.java → src/main/java/cn/reghao/tnb/file/app/config/WebConfig.java

@@ -1,6 +1,6 @@
-package cn.reghao.dfs.store.config;
+package cn.reghao.tnb.file.app.config;
 
-import cn.reghao.dfs.store.inerceptor.StaticFileInterceptor;
+import cn.reghao.tnb.file.app.inerceptor.StaticFileInterceptor;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.servlet.config.annotation.CorsRegistry;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;

+ 4 - 3
src/main/java/cn/reghao/dfs/store/controller/FileAutoController.java → src/main/java/cn/reghao/tnb/file/app/controller/FileAutoController.java

@@ -1,8 +1,9 @@
-package cn.reghao.dfs.store.controller;
+package cn.reghao.tnb.file.app.controller;
 
-import cn.reghao.dfs.store.service.FileAutoService;
 import cn.reghao.jutil.jdk.result.WebBody;
-import cn.reghao.dfs.store.model.dto.auto.VideoFileDto;
+import cn.reghao.tnb.file.app.model.dto.auto.VideoFileDto;
+import cn.reghao.tnb.file.app.model.po.VideoFile;
+import cn.reghao.tnb.file.app.service.FileAutoService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/controller/FileController.java → src/main/java/cn/reghao/tnb/file/app/controller/FileController.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.controller;
+package cn.reghao.tnb.file.app.controller;
 
 import cn.reghao.jutil.jdk.result.WebBody;
 import io.swagger.annotations.Api;

+ 3 - 3
src/main/java/cn/reghao/dfs/store/controller/FileDownloadController.java → src/main/java/cn/reghao/tnb/file/app/controller/FileDownloadController.java

@@ -1,7 +1,7 @@
-package cn.reghao.dfs.store.controller;
+package cn.reghao.tnb.file.app.controller;
 
-import cn.reghao.dfs.store.model.dto.DownloadFile;
-import cn.reghao.dfs.store.service.FileDownloadService;
+import cn.reghao.tnb.file.app.model.dto.DownloadFile;
+import cn.reghao.tnb.file.app.service.FileDownloadService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;

+ 4 - 4
src/main/java/cn/reghao/dfs/store/controller/FileUploadController.java → src/main/java/cn/reghao/tnb/file/app/controller/FileUploadController.java

@@ -1,9 +1,9 @@
-package cn.reghao.dfs.store.controller;
+package cn.reghao.tnb.file.app.controller;
 
-import cn.reghao.dfs.store.model.dto.*;
 import cn.reghao.jutil.jdk.result.WebBody;
-import cn.reghao.dfs.store.model.dto.*;
-import cn.reghao.dfs.store.service.FileUploadService;
+import cn.reghao.tnb.file.app.model.dto.*;
+import cn.reghao.tnb.file.app.model.dto.UploadPrepareRet;
+import cn.reghao.tnb.file.app.service.FileUploadService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.http.MediaType;

+ 5 - 4
src/main/java/cn/reghao/dfs/store/controller/MediaUploadController.java → src/main/java/cn/reghao/tnb/file/app/controller/MediaUploadController.java

@@ -1,9 +1,9 @@
-package cn.reghao.dfs.store.controller;
+package cn.reghao.tnb.file.app.controller;
 
 import cn.reghao.jutil.jdk.result.WebBody;
-import cn.reghao.dfs.store.service.media.AudioFileService;
-import cn.reghao.dfs.store.service.media.ImageFileService;
-import cn.reghao.dfs.store.service.media.VideoFileService;
+import cn.reghao.tnb.file.app.service.media.AudioFileService;
+import cn.reghao.tnb.file.app.service.media.ImageFileService;
+import cn.reghao.tnb.file.app.service.media.VideoFileService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.http.MediaType;
@@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.RestController;
 @Api(tags = "媒体文件上传接口")
 @RestController
 @RequestMapping("/api/file/upload")
+@Deprecated
 public class MediaUploadController {
     private ImageFileService imageService;
     private AudioFileService audioService;

+ 57 - 0
src/main/java/cn/reghao/tnb/file/app/controller/VideoFileController.java

@@ -0,0 +1,57 @@
+package cn.reghao.tnb.file.app.controller;
+
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayInputStream;
+import java.io.OutputStream;
+import java.io.RandomAccessFile;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+
+/**
+ * @author reghao
+ * @date 2022-04-24 16:13:10
+ */
+@RestController
+@RequestMapping("/video")
+public class VideoFileController {
+    @GetMapping("/playback")
+    public void videoPlayer(@RequestParam("videoId") String videoId,
+                            @RequestHeader(required = false) String range,
+                            HttpServletResponse response) throws Exception {
+        String filePath = "/home/reghao/Downloads/mp4/test.mp4";
+        RandomAccessFile raf = new RandomAccessFile(filePath, "r");
+        long fileLength = raf.length();
+        long partLength = 1024*1024*2;
+
+        if (range == null) {
+            response.setContentType("video/mp4");
+            long contentLength = Math.min(fileLength, partLength);
+            response.setHeader("Content-Length", ""+contentLength);
+            response.setHeader("Accept-Ranges", "bytes");
+            response.setStatus(HttpServletResponse.SC_OK);
+            response.getOutputStream().write("".getBytes(StandardCharsets.UTF_8));
+            return;
+        }
+
+        long start = Long.parseLong(range.substring(range.indexOf("=") + 1, range.indexOf("-")));
+        raf.seek(start);
+        byte[] bytes = new byte[(int) partLength];
+        int readBytes = raf.read(bytes);
+        long end = Math.min(start + partLength - 1, start + readBytes-1);
+        long contentLength = end - start + 1;
+
+        response.setContentType("video/mp4");
+        response.setHeader("Content-Length", ""+contentLength);
+        response.setHeader("Content-Range", "bytes "+start+"-"+end+"/"+fileLength);
+        response.setHeader("Accept-Ranges", "bytes");
+        response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
+        response.getOutputStream().write(Arrays.copyOf(bytes, readBytes));
+    }
+}

+ 4 - 3
src/main/java/cn/reghao/dfs/store/db/mapper/FileInfoMapper.java → src/main/java/cn/reghao/tnb/file/app/db/mapper/FileInfoMapper.java

@@ -1,8 +1,9 @@
-package cn.reghao.dfs.store.db.mapper;
+package cn.reghao.tnb.file.app.db.mapper;
 
 import cn.reghao.jutil.jdk.db.BaseMapper;
-import cn.reghao.dfs.store.model.dto.FileDto;
-import cn.reghao.dfs.store.model.po.FileInfo;
+import cn.reghao.tnb.file.api.dto.FileInfoDto;
+import cn.reghao.tnb.file.app.model.dto.FileDto;
+import cn.reghao.tnb.file.app.model.po.FileInfo;
 import org.apache.ibatis.annotations.Mapper;
 
 /**

+ 6 - 3
src/main/java/cn/reghao/dfs/store/db/mapper/FileUrlMapper.java → src/main/java/cn/reghao/tnb/file/app/db/mapper/FileUrlMapper.java

@@ -1,10 +1,12 @@
-package cn.reghao.dfs.store.db.mapper;
+package cn.reghao.tnb.file.app.db.mapper;
 
-import cn.reghao.dfs.store.model.dto.FileUrlDto;
-import cn.reghao.dfs.store.model.po.FileUrl;
 import cn.reghao.jutil.jdk.db.BaseMapper;
+import cn.reghao.tnb.file.app.model.dto.FileUrlDto;
+import cn.reghao.tnb.file.app.model.po.FileUrl;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * @author reghao
  * @date 2021-12-08 14:20:12
@@ -12,4 +14,5 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface FileUrlMapper extends BaseMapper<FileUrl> {
     FileUrlDto findByUploadId(String uploadId);
+    List<FileUrl> findByFileId(String fileId);
 }

+ 4 - 4
src/main/java/cn/reghao/dfs/store/db/mapper/FileUserMapper.java → src/main/java/cn/reghao/tnb/file/app/db/mapper/FileUserMapper.java

@@ -1,9 +1,9 @@
-package cn.reghao.dfs.store.db.mapper;
+package cn.reghao.tnb.file.app.db.mapper;
 
-import cn.reghao.dfs.store.model.po.FileInfo;
-import cn.reghao.dfs.store.model.po.FileUser;
 import cn.reghao.jutil.jdk.db.BaseMapper;
-import cn.reghao.dfs.api.dto.FileInfoDto;
+import cn.reghao.tnb.file.api.dto.FileInfoDto;
+import cn.reghao.tnb.file.app.model.po.FileInfo;
+import cn.reghao.tnb.file.app.model.po.FileUser;
 import org.apache.ibatis.annotations.Mapper;
 
 /**

+ 2 - 2
src/main/java/cn/reghao/dfs/store/db/mapper/ImageFileMapper.java → src/main/java/cn/reghao/tnb/file/app/db/mapper/ImageFileMapper.java

@@ -1,7 +1,7 @@
-package cn.reghao.dfs.store.db.mapper;
+package cn.reghao.tnb.file.app.db.mapper;
 
-import cn.reghao.dfs.store.model.po.ImageFile;
 import cn.reghao.jutil.jdk.db.BaseMapper;
+import cn.reghao.tnb.file.app.model.po.ImageFile;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;

+ 2 - 2
src/main/java/cn/reghao/dfs/store/db/mapper/VideoFileMapper.java → src/main/java/cn/reghao/tnb/file/app/db/mapper/VideoFileMapper.java

@@ -1,7 +1,7 @@
-package cn.reghao.dfs.store.db.mapper;
+package cn.reghao.tnb.file.app.db.mapper;
 
-import cn.reghao.dfs.store.model.po.VideoFile;
 import cn.reghao.jutil.jdk.db.BaseMapper;
+import cn.reghao.tnb.file.app.model.po.VideoFile;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 

+ 15 - 14
src/main/java/cn/reghao/dfs/store/db/repository/FileRepository.java → src/main/java/cn/reghao/tnb/file/app/db/repository/FileRepository.java

@@ -1,17 +1,18 @@
-package cn.reghao.dfs.store.db.repository;
+package cn.reghao.tnb.file.app.db.repository;
 
-import cn.reghao.dfs.store.config.PathUrl;
-import cn.reghao.dfs.store.db.mapper.FileInfoMapper;
-import cn.reghao.dfs.store.db.mapper.FileUrlMapper;
-import cn.reghao.dfs.store.db.mapper.FileUserMapper;
-import cn.reghao.dfs.store.model.dto.FileUrlDto;
-import cn.reghao.dfs.store.model.dto.UploadPrepare;
-import cn.reghao.dfs.store.model.po.FileInfo;
-import cn.reghao.dfs.store.model.po.FileUrl;
-import cn.reghao.dfs.store.model.po.FileUser;
-import cn.reghao.dfs.store.service.FileContentType;
-import cn.reghao.dfs.store.util.StringUtil;
 import cn.reghao.jutil.tool.id.IdGenerator;
+import cn.reghao.tnb.file.app.db.mapper.FileInfoMapper;
+import cn.reghao.tnb.file.app.db.mapper.FileUrlMapper;
+import cn.reghao.tnb.file.app.db.mapper.FileUserMapper;
+import cn.reghao.tnb.file.app.model.dto.FileUrlDto;
+import cn.reghao.tnb.file.app.model.dto.UploadPrepare;
+import cn.reghao.tnb.file.app.model.po.FileInfo;
+import cn.reghao.tnb.file.app.model.po.FileUrl;
+import cn.reghao.tnb.file.app.model.po.FileUser;
+import cn.reghao.tnb.file.app.service.FileContentType;
+import cn.reghao.tnb.file.app.config.PathUrl;
+import cn.reghao.tnb.file.app.util.StringUtil;
+import cn.reghao.tnb.file.app.util.jwt.Jwt;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -43,7 +44,7 @@ public class FileRepository {
         FileInfo fileInfo = new FileInfo(fileId, sha256sum, filename, suffix, size);
 
         String uploadId = idGenerator.getUuid();
-        long currentUserId = 10000L;
+        long currentUserId = Jwt.getUserId();
         FileUser fileUser = new FileUser(uploadId, currentUserId, fileId);
 
         fileInfoMapper.save(fileInfo);
@@ -52,7 +53,7 @@ public class FileRepository {
     }
 
     public String getOrCreateUploadId(String fileId) {
-        long currentUserId = 10000L;
+        long currentUserId = Jwt.getUserId();
         FileUser fileUser = fileUserMapper.findByFileAndUserId(fileId, currentUserId);
         if (fileUser != null) {
             return fileUser.getUploadId();

+ 3 - 2
src/main/java/cn/reghao/dfs/store/inerceptor/StaticFileInterceptor.java → src/main/java/cn/reghao/tnb/file/app/inerceptor/StaticFileInterceptor.java

@@ -1,5 +1,6 @@
-package cn.reghao.dfs.store.inerceptor;
+package cn.reghao.tnb.file.app.inerceptor;
 
+import cn.reghao.tnb.file.app.util.jwt.Jwt;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.lang.Nullable;
 import org.springframework.stereotype.Component;
@@ -23,7 +24,7 @@ public class StaticFileInterceptor implements HandlerInterceptor {
         String uri = request.getRequestURI();
         String method = request.getMethod();
         if ("/api/file/upload/video/auto".equals(uri)) {
-            //Jwt.check();
+            Jwt.check();
         }
 
         String userAgent = request.getHeader("user-agent");

+ 32 - 0
src/main/java/cn/reghao/tnb/file/app/inerceptor/UserContextFiler.java

@@ -0,0 +1,32 @@
+package cn.reghao.tnb.file.app.inerceptor;
+
+import cn.reghao.tnb.file.app.util.jwt.Jwt;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.web.filter.OncePerRequestFilter;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * @author reghao
+ * @date 2022-04-27 14:05:11
+ */
+//@Component
+//@Order(1)
+public class UserContextFiler extends OncePerRequestFilter {
+    @Override
+    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
+            throws IOException, ServletException {
+        long userId = -1L;
+        String value = request.getHeader("Authorization");
+        if (value != null) {
+            String token = value.replace("Bearer ", "");
+            String userIdStr = Jwt.parse(token).getUserId();
+            userId = Long.parseLong(userIdStr);
+        }
+        chain.doFilter(request, response);
+    }
+}

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/dto/DownloadFile.java → src/main/java/cn/reghao/tnb/file/app/model/dto/DownloadFile.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.dto;
+package cn.reghao.tnb.file.app.model.dto;
 
 import lombok.Getter;
 import lombok.Setter;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/dto/FileDto.java → src/main/java/cn/reghao/tnb/file/app/model/dto/FileDto.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.dto;
+package cn.reghao.tnb.file.app.model.dto;
 
 import lombok.Getter;
 import lombok.NoArgsConstructor;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/dto/FileInfoDto.java → src/main/java/cn/reghao/tnb/file/app/model/dto/FileInfoDto.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.dto;
+package cn.reghao.tnb.file.app.model.dto;
 
 import lombok.Getter;
 

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/dto/FileUrlDto.java → src/main/java/cn/reghao/tnb/file/app/model/dto/FileUrlDto.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.dto;
+package cn.reghao.tnb.file.app.model.dto;
 
 import lombok.Getter;
 

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/dto/ImgFileRetDto.java → src/main/java/cn/reghao/tnb/file/app/model/dto/ImgFileRetDto.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.dto;
+package cn.reghao.tnb.file.app.model.dto;
 
 import lombok.Getter;
 import lombok.Setter;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/dto/UploadFile.java → src/main/java/cn/reghao/tnb/file/app/model/dto/UploadFile.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.dto;
+package cn.reghao.tnb.file.app.model.dto;
 
 import lombok.Getter;
 import lombok.Setter;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/dto/UploadFilePart.java → src/main/java/cn/reghao/tnb/file/app/model/dto/UploadFilePart.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.dto;
+package cn.reghao.tnb.file.app.model.dto;
 
 import com.fasterxml.jackson.databind.PropertyNamingStrategy;
 import com.fasterxml.jackson.databind.annotation.JsonNaming;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/dto/UploadFilePartRet.java → src/main/java/cn/reghao/tnb/file/app/model/dto/UploadFilePartRet.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.dto;
+package cn.reghao.tnb.file.app.model.dto;
 
 import lombok.AllArgsConstructor;
 

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/dto/UploadFileRet.java → src/main/java/cn/reghao/tnb/file/app/model/dto/UploadFileRet.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.dto;
+package cn.reghao.tnb.file.app.model.dto;
 
 import lombok.AllArgsConstructor;
 

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/dto/UploadPrepare.java → src/main/java/cn/reghao/tnb/file/app/model/dto/UploadPrepare.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.dto;
+package cn.reghao.tnb.file.app.model.dto;
 
 import com.fasterxml.jackson.databind.PropertyNamingStrategy;
 import com.fasterxml.jackson.databind.annotation.JsonNaming;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/dto/UploadPrepareRet.java → src/main/java/cn/reghao/tnb/file/app/model/dto/UploadPrepareRet.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.dto;
+package cn.reghao.tnb.file.app.model.dto;
 
 import lombok.AllArgsConstructor;
 

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/dto/VidFileRetDto.java → src/main/java/cn/reghao/tnb/file/app/model/dto/VidFileRetDto.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.dto;
+package cn.reghao.tnb.file.app.model.dto;
 
 import lombok.Getter;
 import lombok.Setter;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/dto/VidFileSbtDto.java → src/main/java/cn/reghao/tnb/file/app/model/dto/VidFileSbtDto.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.dto;
+package cn.reghao.tnb.file.app.model.dto;
 
 import lombok.Getter;
 import lombok.Setter;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/dto/auto/VideoFileDto.java → src/main/java/cn/reghao/tnb/file/app/model/dto/auto/VideoFileDto.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.dto.auto;
+package cn.reghao.tnb.file.app.model.dto.auto;
 
 import lombok.Getter;
 import lombok.Setter;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/po/AudioFile.java → src/main/java/cn/reghao/tnb/file/app/model/po/AudioFile.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.po;
+package cn.reghao.tnb.file.app.model.po;
 
 import cn.reghao.jutil.jdk.db.BaseObject;
 import lombok.AllArgsConstructor;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/po/FileInfo.java → src/main/java/cn/reghao/tnb/file/app/model/po/FileInfo.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.po;
+package cn.reghao.tnb.file.app.model.po;
 
 import cn.reghao.jutil.jdk.db.BaseObject;
 import lombok.AllArgsConstructor;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/po/FileUrl.java → src/main/java/cn/reghao/tnb/file/app/model/po/FileUrl.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.po;
+package cn.reghao.tnb.file.app.model.po;
 
 import cn.reghao.jutil.jdk.db.BaseObject;
 import lombok.AllArgsConstructor;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/model/po/FileUser.java → src/main/java/cn/reghao/tnb/file/app/model/po/FileUser.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.model.po;
+package cn.reghao.tnb.file.app.model.po;
 
 import cn.reghao.jutil.jdk.db.BaseObject;
 import lombok.AllArgsConstructor;

+ 2 - 2
src/main/java/cn/reghao/dfs/store/model/po/ImageFile.java → src/main/java/cn/reghao/tnb/file/app/model/po/ImageFile.java

@@ -1,7 +1,7 @@
-package cn.reghao.dfs.store.model.po;
+package cn.reghao.tnb.file.app.model.po;
 
 import cn.reghao.jutil.jdk.db.BaseObject;
-import cn.reghao.dfs.api.dto.ImageFileDto;
+import cn.reghao.tnb.file.api.dto.ImageFileDto;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;

+ 2 - 2
src/main/java/cn/reghao/dfs/store/model/po/VideoFile.java → src/main/java/cn/reghao/tnb/file/app/model/po/VideoFile.java

@@ -1,7 +1,7 @@
-package cn.reghao.dfs.store.model.po;
+package cn.reghao.tnb.file.app.model.po;
 
 import cn.reghao.jutil.jdk.db.BaseObject;
-import cn.reghao.dfs.api.dto.VideoFileDto;
+import cn.reghao.tnb.file.api.dto.VideoFileDto;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;

+ 4 - 4
src/main/java/cn/reghao/dfs/store/rpc/FileInfoServiceImpl.java → src/main/java/cn/reghao/tnb/file/app/rpc/FileInfoServiceImpl.java

@@ -1,8 +1,8 @@
-package cn.reghao.dfs.store.rpc;
+package cn.reghao.tnb.file.app.rpc;
 
-import cn.reghao.dfs.api.dto.FileInfoDto;
-import cn.reghao.dfs.api.iface.FileInfoService;
-import cn.reghao.dfs.store.db.mapper.FileUserMapper;
+import cn.reghao.tnb.file.api.dto.FileInfoDto;
+import cn.reghao.tnb.file.api.iface.FileInfoService;
+import cn.reghao.tnb.file.app.db.mapper.FileUserMapper;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.stereotype.Service;
 

+ 13 - 13
src/main/java/cn/reghao/dfs/store/rpc/VideoFileServiceImpl.java → src/main/java/cn/reghao/tnb/file/app/rpc/VideoFileServiceImpl.java

@@ -1,19 +1,19 @@
-package cn.reghao.dfs.store.rpc;
+package cn.reghao.tnb.file.app.rpc;
 
-import cn.reghao.dfs.store.db.mapper.FileInfoMapper;
-import cn.reghao.dfs.store.db.mapper.FileUrlMapper;
-import cn.reghao.dfs.store.db.mapper.ImageFileMapper;
-import cn.reghao.dfs.store.db.mapper.VideoFileMapper;
-import cn.reghao.dfs.store.model.po.FileInfo;
-import cn.reghao.dfs.store.model.po.FileUrl;
-import cn.reghao.dfs.store.model.po.ImageFile;
-import cn.reghao.dfs.store.model.po.VideoFile;
-import cn.reghao.dfs.store.util.StringUtil;
 import cn.reghao.jutil.jdk.http.util.UrlFormatter;
 import cn.reghao.jutil.tool.id.SnowFlake;
-import cn.reghao.dfs.api.dto.ImageFileDto;
-import cn.reghao.dfs.api.dto.VideoFileDto;
-import cn.reghao.dfs.api.iface.VideoFileService;
+import cn.reghao.tnb.file.api.dto.ImageFileDto;
+import cn.reghao.tnb.file.api.dto.VideoFileDto;
+import cn.reghao.tnb.file.api.iface.VideoFileService;
+import cn.reghao.tnb.file.app.db.mapper.FileInfoMapper;
+import cn.reghao.tnb.file.app.db.mapper.FileUrlMapper;
+import cn.reghao.tnb.file.app.db.mapper.ImageFileMapper;
+import cn.reghao.tnb.file.app.db.mapper.VideoFileMapper;
+import cn.reghao.tnb.file.app.model.po.FileInfo;
+import cn.reghao.tnb.file.app.model.po.FileUrl;
+import cn.reghao.tnb.file.app.model.po.ImageFile;
+import cn.reghao.tnb.file.app.model.po.VideoFile;
+import cn.reghao.tnb.file.app.util.StringUtil;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;

+ 14 - 15
src/main/java/cn/reghao/dfs/store/service/FileAutoService.java → src/main/java/cn/reghao/tnb/file/app/service/FileAutoService.java

@@ -1,20 +1,19 @@
-package cn.reghao.dfs.store.service;
+package cn.reghao.tnb.file.app.service;
 
-import cn.reghao.dfs.store.model.dto.FileDto;
 import cn.reghao.jutil.tool.id.IdGenerator;
-import cn.reghao.dfs.api.constant.FileType;
-import cn.reghao.dfs.api.constant.VideoUrlType;
-import cn.reghao.dfs.store.db.mapper.FileInfoMapper;
-import cn.reghao.dfs.store.db.mapper.FileUrlMapper;
-import cn.reghao.dfs.store.db.mapper.ImageFileMapper;
-import cn.reghao.dfs.store.db.mapper.VideoFileMapper;
-import cn.reghao.dfs.store.model.dto.*;
-import cn.reghao.dfs.store.model.dto.auto.VideoFileDto;
-import cn.reghao.dfs.store.model.po.FileInfo;
-import cn.reghao.dfs.store.model.po.FileUrl;
-import cn.reghao.dfs.store.model.po.ImageFile;
-import cn.reghao.dfs.store.model.po.VideoFile;
-import cn.reghao.dfs.store.util.StringUtil;
+import cn.reghao.tnb.file.api.constant.FileType;
+import cn.reghao.tnb.file.api.constant.VideoUrlType;
+import cn.reghao.tnb.file.app.db.mapper.FileInfoMapper;
+import cn.reghao.tnb.file.app.db.mapper.FileUrlMapper;
+import cn.reghao.tnb.file.app.db.mapper.ImageFileMapper;
+import cn.reghao.tnb.file.app.db.mapper.VideoFileMapper;
+import cn.reghao.tnb.file.app.model.dto.*;
+import cn.reghao.tnb.file.app.model.dto.auto.VideoFileDto;
+import cn.reghao.tnb.file.app.model.po.FileInfo;
+import cn.reghao.tnb.file.app.model.po.FileUrl;
+import cn.reghao.tnb.file.app.model.po.ImageFile;
+import cn.reghao.tnb.file.app.model.po.VideoFile;
+import cn.reghao.tnb.file.app.util.StringUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/service/FileContentType.java → src/main/java/cn/reghao/tnb/file/app/service/FileContentType.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.service;
+package cn.reghao.tnb.file.app.service;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;

+ 5 - 5
src/main/java/cn/reghao/dfs/store/service/FileDownloadService.java → src/main/java/cn/reghao/tnb/file/app/service/FileDownloadService.java

@@ -1,9 +1,9 @@
-package cn.reghao.dfs.store.service;
+package cn.reghao.tnb.file.app.service;
 
-import cn.reghao.dfs.store.util.ServletUtil;
-import cn.reghao.dfs.store.db.repository.FileRepository;
-import cn.reghao.dfs.store.model.dto.DownloadFile;
-import cn.reghao.dfs.store.model.dto.FileUrlDto;
+import cn.reghao.tnb.file.app.db.repository.FileRepository;
+import cn.reghao.tnb.file.app.model.dto.DownloadFile;
+import cn.reghao.tnb.file.app.model.dto.FileUrlDto;
+import cn.reghao.tnb.file.app.util.ServletUtil;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletResponse;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/service/FileHeader.java → src/main/java/cn/reghao/tnb/file/app/service/FileHeader.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.service;
+package cn.reghao.tnb.file.app.service;
 
 import java.io.*;
 

+ 1 - 1
src/main/java/cn/reghao/dfs/store/service/FileSignatures.java → src/main/java/cn/reghao/tnb/file/app/service/FileSignatures.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.service;
+package cn.reghao.tnb.file.app.service;
 
 import java.io.InputStream;
 import java.util.HashMap;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/service/FileStoreService.java → src/main/java/cn/reghao/tnb/file/app/service/FileStoreService.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.service;
+package cn.reghao.tnb.file.app.service;
 
 import org.apache.commons.io.FileUtils;
 import org.springframework.stereotype.Service;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/service/FileTypeService.java → src/main/java/cn/reghao/tnb/file/app/service/FileTypeService.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.service;
+package cn.reghao.tnb.file.app.service;
 
 import org.springframework.stereotype.Service;
 

+ 7 - 8
src/main/java/cn/reghao/dfs/store/service/FileUploadService.java → src/main/java/cn/reghao/tnb/file/app/service/FileUploadService.java

@@ -1,13 +1,12 @@
-package cn.reghao.dfs.store.service;
+package cn.reghao.tnb.file.app.service;
 
-import cn.reghao.dfs.store.model.dto.*;
-import cn.reghao.dfs.store.util.redis.ds.RedisSet;
 import cn.reghao.jutil.jdk.security.DigestUtil;
-import cn.reghao.dfs.store.config.PathUrl;
-import cn.reghao.dfs.store.db.repository.FileRepository;
-import cn.reghao.dfs.store.model.dto.*;
-import cn.reghao.dfs.store.model.po.FileInfo;
-import cn.reghao.dfs.store.util.media.ImageOps;
+import cn.reghao.tnb.file.app.util.redis.ds.RedisSet;
+import cn.reghao.tnb.file.app.config.PathUrl;
+import cn.reghao.tnb.file.app.db.repository.FileRepository;
+import cn.reghao.tnb.file.app.model.dto.*;
+import cn.reghao.tnb.file.app.model.po.FileInfo;
+import cn.reghao.tnb.file.app.util.media.ImageOps;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;

+ 4 - 4
src/main/java/cn/reghao/dfs/store/service/FileUrlService.java → src/main/java/cn/reghao/tnb/file/app/service/FileUrlService.java

@@ -1,8 +1,8 @@
-package cn.reghao.dfs.store.service;
+package cn.reghao.tnb.file.app.service;
 
-import cn.reghao.dfs.store.config.ConfigMap;
-import cn.reghao.dfs.store.config.PathUrl;
-import cn.reghao.dfs.store.util.LoadBalancer;
+import cn.reghao.tnb.file.app.config.ConfigMap;
+import cn.reghao.tnb.file.app.config.PathUrl;
+import cn.reghao.tnb.file.app.util.LoadBalancer;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/service/RedisKey.java → src/main/java/cn/reghao/tnb/file/app/service/RedisKey.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.service;
+package cn.reghao.tnb.file.app.service;
 
 /**
  * @author reghao

+ 1 - 1
src/main/java/cn/reghao/dfs/store/service/media/AudioFileService.java → src/main/java/cn/reghao/tnb/file/app/service/media/AudioFileService.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.service.media;
+package cn.reghao.tnb.file.app.service.media;
 
 import org.springframework.stereotype.Service;
 

+ 8 - 8
src/main/java/cn/reghao/dfs/store/service/media/ImageFileService.java → src/main/java/cn/reghao/tnb/file/app/service/media/ImageFileService.java

@@ -1,11 +1,11 @@
-package cn.reghao.dfs.store.service.media;
-
-import cn.reghao.dfs.store.config.PathUrl;
-import cn.reghao.dfs.store.db.mapper.ImageFileMapper;
-import cn.reghao.dfs.store.model.dto.FileDto;
-import cn.reghao.dfs.store.model.po.ImageFile;
-import cn.reghao.dfs.store.model.dto.ImgFileRetDto;
-import cn.reghao.dfs.store.util.media.ImageOps;
+package cn.reghao.tnb.file.app.service.media;
+
+import cn.reghao.tnb.file.app.config.PathUrl;
+import cn.reghao.tnb.file.app.db.mapper.ImageFileMapper;
+import cn.reghao.tnb.file.app.model.dto.FileDto;
+import cn.reghao.tnb.file.app.model.po.ImageFile;
+import cn.reghao.tnb.file.app.model.dto.ImgFileRetDto;
+import cn.reghao.tnb.file.app.util.media.ImageOps;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;

+ 7 - 8
src/main/java/cn/reghao/dfs/store/service/media/VideoFileService.java → src/main/java/cn/reghao/tnb/file/app/service/media/VideoFileService.java

@@ -1,13 +1,12 @@
-package cn.reghao.dfs.store.service.media;
+package cn.reghao.tnb.file.app.service.media;
 
-import cn.reghao.dfs.store.model.dto.ImgFileRetDto;
 import cn.reghao.jutil.jdk.security.DigestUtil;
-import cn.reghao.dfs.api.constant.VideoUrlType;
-import cn.reghao.dfs.store.config.PathUrl;
-import cn.reghao.dfs.store.db.mapper.VideoFileMapper;
-import cn.reghao.dfs.store.model.dto.*;
-import cn.reghao.dfs.store.model.po.VideoFile;
-import cn.reghao.dfs.store.util.media.VideoOps;
+import cn.reghao.tnb.file.api.constant.VideoUrlType;
+import cn.reghao.tnb.file.app.config.PathUrl;
+import cn.reghao.tnb.file.app.db.mapper.VideoFileMapper;
+import cn.reghao.tnb.file.app.model.dto.*;
+import cn.reghao.tnb.file.app.model.po.VideoFile;
+import cn.reghao.tnb.file.app.util.media.VideoOps;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/service/part/TmpFile.java → src/main/java/cn/reghao/tnb/file/app/service/part/TmpFile.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.service.part;
+package cn.reghao.tnb.file.app.service.part;
 
 import org.apache.commons.io.FileUtils;
 

+ 2 - 1
src/main/java/cn/reghao/dfs/store/service/part/WholeFile.java → src/main/java/cn/reghao/tnb/file/app/service/part/WholeFile.java

@@ -1,8 +1,9 @@
-package cn.reghao.dfs.store.service.part;
+package cn.reghao.tnb.file.app.service.part;
 
 import org.apache.commons.io.FileUtils;
 
 import java.io.*;
+import java.nio.file.Files;
 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.List;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/util/FileLifecycle.java → src/main/java/cn/reghao/tnb/file/app/util/FileLifecycle.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util;
+package cn.reghao.tnb.file.app.util;
 
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.boot.ApplicationArguments;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/util/HertubePrefix.java → src/main/java/cn/reghao/tnb/file/app/util/HertubePrefix.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util;
+package cn.reghao.tnb.file.app.util;
 
 /**
  * hertube 应用静态文件的存储位置前缀

+ 2 - 2
src/main/java/cn/reghao/dfs/store/util/LoadBalancer.java → src/main/java/cn/reghao/tnb/file/app/util/LoadBalancer.java

@@ -1,7 +1,7 @@
-package cn.reghao.dfs.store.util;
+package cn.reghao.tnb.file.app.util;
 
-import cn.reghao.dfs.store.config.ConfigMap;
 import cn.reghao.jutil.jdk.security.DigestUtil;
+import cn.reghao.tnb.file.app.config.ConfigMap;
 import com.google.common.hash.HashFunction;
 import com.google.common.hash.Hashing;
 import org.springframework.stereotype.Component;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/util/ServletUtil.java → src/main/java/cn/reghao/tnb/file/app/util/ServletUtil.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util;
+package cn.reghao.tnb.file.app.util;
 
 import org.springframework.util.StringUtils;
 import org.springframework.web.context.request.RequestContextHolder;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/util/StringUtil.java → src/main/java/cn/reghao/tnb/file/app/util/StringUtil.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util;
+package cn.reghao.tnb.file.app.util;
 
 /**
  * @author reghao

+ 1 - 1
src/main/java/cn/reghao/dfs/store/util/UserContext.java → src/main/java/cn/reghao/tnb/file/app/util/UserContext.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util;
+package cn.reghao.tnb.file.app.util;
 
 /**
  * 获取当前请求的用户

+ 1 - 1
src/main/java/cn/reghao/dfs/store/util/WebResult.java → src/main/java/cn/reghao/tnb/file/app/util/WebResult.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util;
+package cn.reghao.tnb.file.app.util;
 
 import cn.reghao.jutil.jdk.result.Result;
 import cn.reghao.jutil.jdk.result.ResultStatus;

+ 2 - 1
src/main/java/cn/reghao/dfs/store/util/image/Captcha.java → src/main/java/cn/reghao/tnb/file/app/util/image/Captcha.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util.image;
+package cn.reghao.tnb.file.app.util.image;
 
 import javax.imageio.ImageIO;
 import java.awt.*;
@@ -6,6 +6,7 @@ import java.awt.geom.CubicCurve2D;
 import java.awt.geom.QuadCurve2D;
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayOutputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.security.SecureRandom;
 import java.util.Random;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/util/image/ImageUtil.java → src/main/java/cn/reghao/tnb/file/app/util/image/ImageUtil.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util.image;
+package cn.reghao.tnb.file.app.util.image;
 
 import javax.imageio.ImageIO;
 import java.awt.*;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/util/image/QrCode.java → src/main/java/cn/reghao/tnb/file/app/util/image/QrCode.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util.image;
+package cn.reghao.tnb.file.app.util.image;
 
 import com.google.zxing.*;
 import com.google.zxing.client.j2se.BufferedImageLuminanceSource;

+ 110 - 0
src/main/java/cn/reghao/tnb/file/app/util/jwt/Jwt.java

@@ -0,0 +1,110 @@
+package cn.reghao.tnb.file.app.util.jwt;
+
+import cn.reghao.tnb.file.app.util.ServletUtil;
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+
+import java.util.Date;
+
+/**
+ * JWT 令牌
+ * TODO 将 JWT 令牌存放在 redis 中
+ *
+ * @author reghao
+ * @date 2019-11-17 23:10:58
+ */
+public class Jwt {
+    public static final String JWT_PREFIX = "Bearer ";
+    public static final String AUTH_HEADER = "Authorization";
+
+    // TODO 有效期和 key 都应该可以动态设置,有效期一周
+    private static final long EXPIRATION_TIME = 60_000*60*24*7;
+    private static final String SIGN_KEY = "tnb.reghao.icu";
+
+    /**
+     * 生成一个 token
+     *
+     * @param
+     * @return
+     * @date 2019-11-21 下午4:39
+     */
+    public static String create(JwtPayload payload) {
+        return Jwts.builder()
+                .claim("authorities", payload.getRoles())
+                .setSubject(payload.getUserId())
+                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
+                .signWith(SignatureAlgorithm.HS256, SIGN_KEY)
+                .compact();
+    }
+
+    /**
+     * 解析 token,过期的 token 会抛出 ExpiredJwtException 异常
+     *
+     * @param
+     * @return
+     * @date 2021-07-27 下午2:37
+     */
+    public static JwtPayload parse(String token) {
+        Claims claims = Jwts.parser().setSigningKey(SIGN_KEY).parseClaimsJws(token).getBody();
+        String username = claims.getSubject();
+        String roles = (String) claims.get("authorities");
+        Date expiration = claims.getExpiration();
+        return new JwtPayload(username, roles, expiration);
+    }
+
+    /**
+     * 检查 token 是否过期
+     *
+     * @param
+     * @return
+     * @date 2019-11-21 下午4:39
+     */
+    public static boolean isValid(Date expiration) {
+        return expiration.after(new Date());
+    }
+
+    /**
+     * TODO 只能用于主动刷新,解析过期的 token 会抛出 ExpiredJwtException 异常
+     *
+     * @param
+     * @return
+     * @date 2021-07-26 下午4:45
+     */
+    public static void refresh(String token) {
+    }
+
+    /**
+     * 检查 JWT token 是否存在且有效
+     *
+     * @param
+     * @return
+     * @date 2022-01-14 下午6:38
+     */
+    public static void check() throws Exception {
+        String value = ServletUtil.getRequest().getHeader("Authorization");
+        if (value == null) {
+            throw new Exception("no jwt token");
+        } else {
+            String token = value.replace("Bearer ", "");
+            parse(token);
+        }
+    }
+
+    public static JwtPayload getUserInfo() {
+        String value = ServletUtil.getRequest().getHeader("Authorization");
+        if (value != null) {
+            String token = value.replace("Bearer ", "");
+            return parse(token);
+        }
+
+        return null;
+    }
+
+    public static Long getUserId() {
+        String value = ServletUtil.getRequest().getHeader("Authorization");
+        String token = value.replace("Bearer ", "");
+        JwtPayload jwtPayload = parse(token);
+        return Long.parseLong(jwtPayload.getUserId());
+    }
+}

+ 28 - 0
src/main/java/cn/reghao/tnb/file/app/util/jwt/JwtPayload.java

@@ -0,0 +1,28 @@
+package cn.reghao.tnb.file.app.util.jwt;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author reghao
+ * @date 2021-07-26 09:58:45
+ */
+@Data
+public class JwtPayload {
+    private String userId;
+    private String roles;
+    private Date expiration;
+    private String signKey;
+
+    public JwtPayload(String userId, String roles) {
+        this.userId = userId;
+        this.roles = roles;
+    }
+
+    public JwtPayload(String userId, String roles, Date expiration) {
+        this.userId = userId;
+        this.roles = roles;
+        this.expiration = expiration;
+    }
+}

+ 1 - 1
src/main/java/cn/reghao/dfs/store/util/media/ImageOps.java → src/main/java/cn/reghao/tnb/file/app/util/media/ImageOps.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util.media;
+package cn.reghao.tnb.file.app.util.media;
 
 import javax.imageio.ImageIO;
 import java.awt.*;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/util/media/VideoOps.java → src/main/java/cn/reghao/tnb/file/app/util/media/VideoOps.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util.media;
+package cn.reghao.tnb.file.app.util.media;
 
 import org.bytedeco.javacv.FFmpegFrameGrabber;
 import org.bytedeco.javacv.Frame;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/util/redis/RedisConfig.java → src/main/java/cn/reghao/tnb/file/app/util/redis/RedisConfig.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util.redis;
+package cn.reghao.tnb.file.app.util.redis;
 
 import org.springframework.cache.annotation.CachingConfigurerSupport;
 import org.springframework.context.annotation.Bean;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/util/redis/RedisKeys.java → src/main/java/cn/reghao/tnb/file/app/util/redis/RedisKeys.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util.redis;
+package cn.reghao.tnb.file.app.util.redis;
 
 /**
  * @author reghao

+ 1 - 1
src/main/java/cn/reghao/dfs/store/util/redis/ds/RedisHash.java → src/main/java/cn/reghao/tnb/file/app/util/redis/ds/RedisHash.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util.redis.ds;
+package cn.reghao.tnb.file.app.util.redis.ds;
 
 import org.springframework.data.redis.core.HashOperations;
 import org.springframework.data.redis.core.RedisTemplate;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/util/redis/ds/RedisKey.java → src/main/java/cn/reghao/tnb/file/app/util/redis/ds/RedisKey.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util.redis.ds;
+package cn.reghao.tnb.file.app.util.redis.ds;
 
 import org.springframework.data.redis.core.RedisOperations;
 import org.springframework.data.redis.core.RedisTemplate;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/util/redis/ds/RedisList.java → src/main/java/cn/reghao/tnb/file/app/util/redis/ds/RedisList.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util.redis.ds;
+package cn.reghao.tnb.file.app.util.redis.ds;
 
 import org.springframework.data.redis.core.ListOperations;
 import org.springframework.data.redis.core.RedisTemplate;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/util/redis/ds/RedisSet.java → src/main/java/cn/reghao/tnb/file/app/util/redis/ds/RedisSet.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util.redis.ds;
+package cn.reghao.tnb.file.app.util.redis.ds;
 
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.SetOperations;

+ 1 - 1
src/main/java/cn/reghao/dfs/store/util/redis/ds/RedisString.java → src/main/java/cn/reghao/tnb/file/app/util/redis/ds/RedisString.java

@@ -1,4 +1,4 @@
-package cn.reghao.dfs.store.util.redis.ds;
+package cn.reghao.tnb.file.app.util.redis.ds;
 
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.ValueOperations;

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

@@ -1,25 +1,25 @@
 spring:
   redis:
     database: 0
-    host: localhost
+    host: 192.168.0.125
     port: 6379
-    password: Dev@123456
+    password: Test@123456
   datasource:
-    url: jdbc:mysql://localhost:3306/reghao_tnb_rdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
-    username: dev
-    password: Dev@123456
+    url: jdbc:mysql://192.168.0.50:3306/reghao_tnb_tdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
+    username: test
+    password: Test@123456
 dubbo:
   registry:
-    address: zookeeper://localhost:2181
+    address: zookeeper://192.168.0.50:2181
 dfs:
   domain: file.reghao.cn
   dfsConfigs:
-    - baseDir: /home/reghao/opt/file/dfs/0/
+    - baseDir: /home/reghao/opt/file/group0/
       group: group0
       node: node0
-    - baseDir: /home/reghao/opt/file/dfs/1/
+    - baseDir: /home/reghao/opt/file/group1/
       group: group1
       node: node0
-    - baseDir: /home/reghao/opt/file/dfs/2/
+    - baseDir: /home/reghao/opt/file/group2/
       group: group2
       node: node0

+ 25 - 0
src/main/resources/application-dev1.yml

@@ -0,0 +1,25 @@
+spring:
+  redis:
+    database: 0
+    host: localhost
+    port: 6379
+    password: Dev@123456
+  datasource:
+    url: jdbc:mysql://localhost:3306/reghao_tnb_rdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
+    username: dev
+    password: Dev@123456
+dubbo:
+  registry:
+    address: zookeeper://localhost:2181
+dfs:
+  domain: file.reghao.cn
+  dfsConfigs:
+    - baseDir: /home/reghao/opt/file/group0/
+      group: group0
+      node: node0
+    - baseDir: /home/reghao/opt/file/group1/
+      group: group1
+      node: node0
+    - baseDir: /home/reghao/opt/file/group2/
+      group: group2
+      node: node0

+ 25 - 0
src/main/resources/application-test.yml

@@ -0,0 +1,25 @@
+spring:
+  redis:
+    database: 0
+    host: 192.168.0.125
+    port: 6379
+    password: Test@123456
+  datasource:
+    url: jdbc:mysql://192.168.0.50:3306/reghao_tnb_tdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
+    username: test
+    password: Test@123456
+dubbo:
+  registry:
+    address: zookeeper://192.168.0.50:2181
+dfs:
+  domain: file.reghao.cn
+  dfsConfigs:
+    - baseDir: /home/reghao/opt/file/group0/
+      group: group0
+      node: node0
+    - baseDir: /home/reghao/opt/file/group1/
+      group: group1
+      node: node0
+    - baseDir: /home/reghao/opt/file/group2/
+      group: group2
+      node: node0

+ 5 - 6
src/main/resources/application.yml

@@ -1,12 +1,12 @@
 server:
-  port: 7070
+  port: 8002
 spring:
   servlet:
     multipart:
       max-file-size: 10GB
       max-request-size: 10GB
   application:
-    name: dfs-store
+    name: file-service
   profiles:
     active: @profile.active@
   datasource:
@@ -25,11 +25,10 @@ mybatis:
   configuration:
     map-underscore-to-camel-case: true
   mapper-locations: classpath*:mapper/**/**.xml
-  type-aliases-package: cn.reghao.dfs.store.model.po
+  type-aliases-package: cn.reghao.tnb.file.app.model.po
 dubbo:
   scan:
-    base-packages: cn.reghao.dfs.store.rpc
+    base-packages: cn.reghao.tnb.file.app.rpc
   protocol:
     name: dubbo
-    port: 7080
-#    host: 172.16.90.200
+    port: 8102

+ 7 - 4
src/main/resources/mapper/FileInfoMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
-<mapper namespace="cn.reghao.dfs.store.db.mapper.FileInfoMapper">
+<mapper namespace="cn.reghao.tnb.file.app.db.mapper.FileInfoMapper">
     <insert id="save" useGeneratedKeys="true" keyProperty="id">
         insert into file_info
         (`id`,`deleted`,`create_time`,`update_time`,`file_id`,`sha256sum`,`filename`,`suffix`,`size`,`file_type`,`content_type`,`uploaded`)
@@ -22,16 +22,19 @@
         where file_id=#{fileId}
     </update>
 
-    <select id="findBySha256sum" resultType="cn.reghao.dfs.store.model.dto.FileDto">
+    <select id="findBySha256sum" resultType="cn.reghao.tnb.file.app.model.dto.FileDto">
         select file.file_id as fileId,file.filename,url.url from file_info file
         inner join file_url url
         on file.file_id=url.file_id and file.sha256sum=#{sha256sum}
         order by url.create_time desc limit 1
     </select>
-    <select id="findFileInfoBySha256sum" resultType="cn.reghao.dfs.store.model.po.FileInfo">
+    <select id="findFileInfoBySha256sum" resultType="cn.reghao.tnb.file.app.model.po.FileInfo">
         select * from file_info where sha256sum=#{sha256sum}
     </select>
-    <select id="findByFileId" resultType="cn.reghao.dfs.store.model.po.FileInfo">
+    <select id="findByFileId" resultType="cn.reghao.tnb.file.app.model.po.FileInfo">
         select * from file_info where file_id=#{fileId}
     </select>
+    <select id="findAllByPage" resultType="cn.reghao.tnb.file.app.model.po.FileInfo">
+        select * from file_info
+    </select>
 </mapper>

+ 5 - 2
src/main/resources/mapper/FileUrlMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
-<mapper namespace="cn.reghao.dfs.store.db.mapper.FileUrlMapper">
+<mapper namespace="cn.reghao.tnb.file.app.db.mapper.FileUrlMapper">
     <insert id="save" useGeneratedKeys="true" keyProperty="id">
         insert into file_url
         (`id`,`deleted`,`create_time`,`update_time`,`file_id`,`file_path`,`url`,`path`,`dc_id`,`node_id`)
@@ -9,11 +9,14 @@
         (#{id},#{deleted},#{createTime},#{updateTime},#{fileId},#{filePath},#{url},#{path},#{dcId},#{nodeId})
     </insert>
 
-    <select id="findByUploadId" resultType="cn.reghao.dfs.store.model.dto.FileUrlDto">
+    <select id="findByUploadId" resultType="cn.reghao.tnb.file.app.model.dto.FileUrlDto">
         select info.id,info.filename,url.path,url.url from file_url url
         inner join file_user fileUser
         inner join file_info info
         on fileUser.file_id=url.file_id and info.file_id=url.file_id and fileUser.upload_id=#{uploadId}
         limit 1
     </select>
+    <select id="findByFileId" resultType="cn.reghao.tnb.file.app.model.po.FileUrl">
+        select * from file_url where file_id=#{fileId}
+    </select>
 </mapper>

+ 4 - 4
src/main/resources/mapper/FileUserMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
-<mapper namespace="cn.reghao.dfs.store.db.mapper.FileUserMapper">
+<mapper namespace="cn.reghao.tnb.file.app.db.mapper.FileUserMapper">
     <insert id="save" useGeneratedKeys="true" keyProperty="id">
         insert into file_user
         (`id`,`deleted`,`create_time`,`update_time`,`upload_id`,`upload_by`,`file_id`)
@@ -9,18 +9,18 @@
         (#{id},#{deleted},#{createTime},#{updateTime},#{uploadId},#{uploadBy},#{fileId})
     </insert>
 
-    <select id="findByUploadId" resultType="cn.reghao.dfs.api.dto.FileInfoDto">
+    <select id="findByUploadId" resultType="cn.reghao.tnb.file.api.dto.FileInfoDto">
         select info.filename,info.suffix,info.size,info.file_type as fileType,url.url
         from file_info info
         inner join file_url url
         inner join file_user fileUser
         on info.file_id=url.file_id and fileUser.file_id=info.file_id and fileUser.upload_id=#{uploadId}
     </select>
-    <select id="findByFileAndUserId" resultType="cn.reghao.dfs.store.model.po.FileUser">
+    <select id="findByFileAndUserId" resultType="cn.reghao.tnb.file.app.model.po.FileUser">
         select * from file_user
         where file_id=#{fileId} and upload_by=#{userId}
     </select>
-    <select id="findFileInfoByUploadId" resultType="cn.reghao.dfs.store.model.po.FileInfo">
+    <select id="findFileInfoByUploadId" resultType="cn.reghao.tnb.file.app.model.po.FileInfo">
         select fileInfo.* from file_info fileInfo
         inner join file_user fileUser
         on fileUser.file_id=fileInfo.file_id and fileUser.upload_id=#{uploadId}

+ 3 - 3
src/main/resources/mapper/ImageFileMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
-<mapper namespace="cn.reghao.dfs.store.db.mapper.ImageFileMapper">
+<mapper namespace="cn.reghao.tnb.file.app.db.mapper.ImageFileMapper">
     <insert id="save" useGeneratedKeys="true" keyProperty="id">
         insert into image_file
         (`id`,`deleted`,`create_time`,`update_time`,`file_id`,`base_url`,`width`,`height`)
@@ -22,10 +22,10 @@
         where file_id=#{fileId}
     </update>
 
-    <select id="findByFileId" resultType="cn.reghao.dfs.store.model.po.ImageFile">
+    <select id="findByFileId" resultType="cn.reghao.tnb.file.app.model.po.ImageFile">
         select * from image_file where file_id=#{fileId}
     </select>
-    <select id="findByFileIds" resultType="cn.reghao.dfs.store.model.po.ImageFile">
+    <select id="findByFileIds" resultType="cn.reghao.tnb.file.app.model.po.ImageFile">
         select * from image_file where file_id in #{list}
     </select>
 </mapper>

+ 3 - 3
src/main/resources/mapper/VideoFileMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
-<mapper namespace="cn.reghao.dfs.store.db.mapper.VideoFileMapper">
+<mapper namespace="cn.reghao.tnb.file.app.db.mapper.VideoFileMapper">
     <insert id="save" useGeneratedKeys="true" keyProperty="id">
         insert into video_file
         (`id`,`deleted`,`create_time`,`update_time`,`file_id`,`bandwidth`,`frame_rate`,`width`,`height`,`horizontal`,`rotate`,`url_type`,`base_url`,`backup_url`,`duration`,`base_cover_url`)
@@ -18,10 +18,10 @@
         where file_id=#{fileId}
     </update>
 
-    <select id="findByFileId" resultType="cn.reghao.dfs.store.model.po.VideoFile">
+    <select id="findByFileId" resultType="cn.reghao.tnb.file.app.model.po.VideoFile">
         select * from video_file where file_id=#{fileId} order by create_time desc limit 1
     </select>
-    <select id="findByMatchBaseUrl" resultType="cn.reghao.dfs.store.model.po.VideoFile">
+    <select id="findByMatchBaseUrl" resultType="cn.reghao.tnb.file.app.model.po.VideoFile">
         select * from video_file where base_url like concat('%',#{pattern},'%')
     </select>
 </mapper>

+ 51 - 1
src/test/java/FileTest.java

@@ -1,9 +1,59 @@
+import cn.reghao.jutil.tool.id.IdGenerator;
+import cn.reghao.tnb.file.app.FileApplication;
+import cn.reghao.tnb.file.app.db.mapper.*;
+import cn.reghao.tnb.file.app.model.po.FileInfo;
+import cn.reghao.tnb.file.app.model.po.FileUrl;
+import cn.reghao.tnb.file.app.model.po.FileUser;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author reghao
  * @date 2022-04-23 17:17:50
  */
+@ActiveProfiles("dev")
+@SpringBootTest(classes = FileApplication.class)
+@RunWith(SpringRunner.class)
 public class FileTest {
-    public static void main(String[] args) {
+    @Autowired
+    FileInfoMapper fileInfoMapper;
+    @Autowired
+    FileUrlMapper fileUrlMapper;
+    @Autowired
+    FileUserMapper fileUserMapper;
+    @Autowired
+    VideoFileMapper videoFileMapper;
+    @Autowired
+    ImageFileMapper imageFileMapper;
+
+    IdGenerator idGenerator = new IdGenerator("upload-id");
+    @Test
+    public void test() {
+        int page = 1;
+        int size = 100;
+
+        List<FileInfo> list = fileInfoMapper.findAllByPage(page, size);
+        list.forEach(fileInfo -> {
+            String fileId = fileInfo.getFileId();
+            List<FileUrl> fileUrls = fileUrlMapper.findByFileId(fileId);
+            FileUrl fileUrl = fileUrls.get(0);
+            String url = fileUrl.getUrl();
+
+            String filePath = url.replace("//static.reghao.cn", "");
+            String path = url.replace("//static.reghao.cn", "");
+            String url1 = url.replace("static.reghao.cn", "file.reghao.cn");
+
+            fileUrl.setFilePath(filePath);
+            fileUrl.setPath(path);
+            fileUrl.setUrl(url1);
+            System.out.println();
+        });
     }
 }