reghao 3 år sedan
förälder
incheckning
5b82108561

+ 21 - 4
src/main/java/cn/reghao/tnb/file/app/controller/FileController.java

@@ -2,11 +2,19 @@ package cn.reghao.tnb.file.app.controller;
 
 import cn.reghao.jutil.jdk.result.WebBody;
 import cn.reghao.tnb.file.app.db.repository.FileRepository;
+import cn.reghao.tnb.file.app.util.store.LocalStore;
+import cn.reghao.tnb.file.app.util.store.LocalStores;
+import cn.reghao.tnb.file.app.util.store.StoreDir;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
 /**
  * @author reghao
  * @date 2022-06-20 13:46:12
@@ -29,9 +37,18 @@ public class FileController {
         return WebBody.success(msg);
     }
 
-    @ApiOperation("检查文件是否已存在")
-    @GetMapping("/exist")
-    public String isFileExist(@RequestParam("sha256sum") String sha256sum) {
-        return WebBody.success();
+    @ApiOperation("获取文件存储")
+    @GetMapping(value = "/store", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String localStores() {
+        List<LocalStore> list = LocalStores.getLocalStores();
+        return WebBody.success(list);
+    }
+
+    @ApiOperation("获取文件存储")
+    @GetMapping(value = "/store/dir", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String localStoreDirs(@Param("blockId") String blockId) {
+        List<StoreDir> list = LocalStores.getStoreDir1(blockId);
+        List<StoreDir> list1 = LocalStores.getStoreDirs();
+        return WebBody.success(list);
     }
 }

+ 19 - 29
src/main/java/cn/reghao/tnb/file/app/controller/SpiderFileController.java

@@ -1,24 +1,19 @@
 package cn.reghao.tnb.file.app.controller;
 
 import cn.reghao.jutil.jdk.result.WebBody;
-import cn.reghao.tnb.file.app.db.repository.FileRepository;
-import cn.reghao.tnb.file.app.model.dto.UploadFile;
+import cn.reghao.tnb.file.app.db.mapper.FileUserMapper;
 import cn.reghao.tnb.file.app.model.dto.UploadedFile;
 import cn.reghao.tnb.file.app.model.vo.UploadFileRet;
 import cn.reghao.tnb.file.app.service.FileUploadService;
-import cn.reghao.tnb.file.app.service.SpiderFileService;
-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 lombok.extern.slf4j.Slf4j;
 import org.springframework.http.MediaType;
-import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.constraints.NotNull;
 import java.io.InputStream;
+import java.util.Objects;
 
 /**
  * @author reghao
@@ -30,36 +25,31 @@ import java.io.InputStream;
 @Deprecated
 public class SpiderFileController {
     private final FileUploadService fileUploadService;
-    private ImageFileService imageService;
-    private VideoFileService videoService;
+    private final FileUserMapper fileUserMapper;
 
-    public SpiderFileController(FileUploadService fileUploadService, ImageFileService imageService,
-                                 VideoFileService videoService) {
+    public SpiderFileController(FileUploadService fileUploadService, FileUserMapper fileUserMapper) {
         this.fileUploadService = fileUploadService;
-        this.imageService = imageService;
-        this.videoService = videoService;
+        this.fileUserMapper = fileUserMapper;
     }
 
-    @ApiOperation(value = "上传图片文件")
-    @PostMapping(value = "/image", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String uploadImageFile(@NotNull MultipartFile file, String userId) throws Exception {
+    @ApiOperation(value = "上传文件")
+    @PostMapping(value = "/file", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String uploadFile(@NotNull MultipartFile file, String username) throws Exception {
         String filename = file.getOriginalFilename();
         long size = file.getSize();
-        String contentType = file.getContentType();
+        String contentType = Objects.requireNonNull(file.getContentType());
         InputStream inputStream = file.getInputStream();
-        if (contentType == null || !contentType.startsWith("image")) {
-            return WebBody.failWithMsg("content-type 错误");
-        }
 
-        UploadedFile uploadedFile = new UploadedFile(filename, size, contentType, inputStream);
-        UploadFileRet uploadFileRet = fileUploadService.put(uploadedFile);
-        return WebBody.success(uploadFileRet);
-    }
+        if (contentType.startsWith("image") || contentType.startsWith("video")) {
+            String userId = fileUserMapper.findUserIdByUsername(username);
+            if (userId == null) {
+                return WebBody.failWithMsg(username + " 不存在");
+            }
 
-    @ApiOperation(value = "上传视频文件")
-    @PostMapping(value = "/video", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String uploadVideoFile(@Validated UploadFile uploadFile) throws Exception {
-        log.info("视频文件");
-        return WebBody.success();
+            UploadedFile uploadedFile = new UploadedFile(filename, size, contentType, inputStream);
+            UploadFileRet uploadFileRet = fileUploadService.put(uploadedFile, userId);
+            return WebBody.success(uploadFileRet);
+        }
+        return WebBody.failWithMsg("content-type 错误");
     }
 }

+ 2 - 0
src/main/java/cn/reghao/tnb/file/app/db/mapper/FileUserMapper.java

@@ -15,4 +15,6 @@ public interface FileUserMapper extends BaseMapper<FileUser> {
     FileUser findByFileAndUserId(@Param("fileId") String fileId, @Param("userId") String userId);
     FileUser findByUploadAndUserId(@Param("uploadId") String uploadId, @Param("userId") String userId);
     FileInfo findFileInfoByUploadId(String uploadId);
+    @Deprecated
+    String findUserIdByUsername(String userId);
 }

+ 1 - 1
src/main/java/cn/reghao/tnb/file/app/service/FileUrlService.java

@@ -36,7 +36,7 @@ public class FileUrlService {
         } else if (contentType.startsWith("image")) {
             path = String.format("image/%s.%s", uploadId, suffix);
         } else if (contentType.startsWith("video")) {
-            path = String.format("video/%s.%s", uploadId, suffix);
+            path = String.format("video/playback/%s.%s", uploadId, suffix);
         } else {
             path = String.format("file/%s.%s", uploadId, suffix);
         }

+ 0 - 45
src/main/java/cn/reghao/tnb/file/app/service/SpiderFileService.java

@@ -1,45 +0,0 @@
-package cn.reghao.tnb.file.app.service;
-
-import cn.reghao.jutil.jdk.http.util.UrlFormatter;
-import cn.reghao.jutil.tool.id.IdGenerator;
-import cn.reghao.tnb.file.app.config.DfsProperties;
-import cn.reghao.tnb.file.app.db.mapper.*;
-import cn.reghao.tnb.file.app.model.po.*;
-import cn.reghao.tnb.file.app.util.store.LocalStores;
-import cn.reghao.tnb.file.app.util.StringUtil;
-import cn.reghao.tnb.file.client.model.SpiderFile;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * @author reghao
- * @date 2021-12-31 11:26:21
- */
-@Service
-@Deprecated
-public class SpiderFileService {
-    private final FileInfoMapper fileInfoMapper;
-    private final FileUrlMapper fileUrlMapper;
-    private final FileUserMapper fileUserMapper;
-    private final VideoFileMapper videoFileMapper;
-    private final ImageFileMapper imageFileMapper;
-    private final IdGenerator idGenerator;
-    private final String domain;
-
-    public SpiderFileService(FileInfoMapper fileInfoMapper, FileUrlMapper fileUrlMapper,
-                             FileUserMapper fileUserMapper, VideoFileMapper videoFileMapper,
-                             ImageFileMapper imageFileMapper, DfsProperties dfsProperties) {
-        this.fileInfoMapper = fileInfoMapper;
-        this.fileUrlMapper = fileUrlMapper;
-        this.fileUserMapper = fileUserMapper;
-        this.videoFileMapper = videoFileMapper;
-        this.imageFileMapper = imageFileMapper;
-        this.idGenerator = new IdGenerator("upload-id");
-        this.domain = dfsProperties.getDomain();
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    public String addFile(SpiderFile spiderFile) throws Exception {
-        return null;
-    }
-}

+ 0 - 2
src/main/java/cn/reghao/tnb/file/app/util/store/LocalStore.java

@@ -15,7 +15,6 @@ import java.util.concurrent.atomic.AtomicLong;
 @Getter
 public class LocalStore {
     private final String baseDir;
-    private final FileStore fileStore;
     private final String blockId;
     private final String fs;
     private final String fsType;
@@ -26,7 +25,6 @@ public class LocalStore {
 
     public LocalStore(String baseDir, FileStore fileStore, String blockId, double maxPercent) throws IOException {
         this.baseDir = baseDir;
-        this.fileStore = fileStore;
         this.blockId = blockId;
         this.fs = fileStore.name();
         this.fsType = fileStore.type();

+ 16 - 0
src/main/java/cn/reghao/tnb/file/app/util/store/LocalStores.java

@@ -11,6 +11,7 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
 
 /**
  * @author reghao
@@ -135,4 +136,19 @@ public class LocalStores {
         String blockId = getBlockId(absolutePath);
         return subDirs.get(blockId).get(new File(absolutePath).getParent() + File.separator);
     }
+
+    public static List<LocalStore> getLocalStores() {
+        return new ArrayList<>(storeMap.values());
+    }
+
+    public static List<StoreDir> getStoreDir1(String blockId) {
+        return new ArrayList<>(subDirs.get(blockId).values());
+    }
+
+    public static List<StoreDir> getStoreDirs() {
+        return storeMap.keySet().stream()
+                .map(blockId -> subDirs.get(blockId).values())
+                .flatMap(Collection::stream)
+                .collect(Collectors.toList());
+    }
 }

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

@@ -4,7 +4,7 @@ spring:
     username: dev
     password: Dev@123456
 dfs:
-  domain: file.reghao.cn
+  domain: file1.reghao.cn
   baseDirs:
     - /opt/file/disk0/
     - /home/reghao/opt/file/disk0/

+ 2 - 2
src/main/resources/application.yml

@@ -3,8 +3,8 @@ server:
 spring:
   servlet:
     multipart:
-      max-request-size: 20MB
-      max-file-size: 20MB
+      max-request-size: 20GB
+      max-file-size: 20GB
   application:
     name: file-service
   profiles:

+ 3 - 0
src/main/resources/mapper/FileUserMapper.xml

@@ -22,4 +22,7 @@
         inner join file_user fileUser
         on fileUser.file_id=fileInfo.file_id and fileUser.upload_id=#{uploadId}
     </select>
+    <select id="findUserIdByUsername" resultType="java.lang.String">
+        select user_id from user_account where username=#{username}
+    </select>
 </mapper>