Explorar o código

UploadChannel 添加一个 processFile 字段, 标识 oss-store 是否处理通过该 channel 上传的文件

reghao %!s(int64=2) %!d(string=hai) anos
pai
achega
a62490bcf1

+ 2 - 0
oss-console/src/main/java/cn/reghao/oss/console/app/model/po/UploadChannel.java

@@ -22,6 +22,7 @@ public class UploadChannel extends BaseEntity {
     private String prefix;
     private Long maxSize;
     private Integer fileType;
+    private Boolean processFile;
     private Integer scope;
     private String bindDomain;
     private Integer createBy;
@@ -32,6 +33,7 @@ public class UploadChannel extends BaseEntity {
         this.prefix = uploadChannelDto.getChannelPrefix();
         this.maxSize = uploadChannelDto.getMaxSize();
         this.fileType = uploadChannelDto.getFileType();
+        this.processFile = false;
         this.scope = uploadChannelDto.getScope();
         this.bindDomain = uploadChannelDto.getDomain();
         this.createBy = createBy;

+ 2 - 1
oss-console/src/main/java/cn/reghao/oss/console/app/service/OssService.java

@@ -87,8 +87,9 @@ public class OssService {
         String channelPrefix = uploadChannel.getPrefix();
         long maxSize = uploadChannel.getMaxSize();
         int fileType = uploadChannel.getFileType();
+        boolean processFile = uploadChannel.getProcessFile();
         int scope = uploadChannel.getScope();
-        return new ObjectChannel(channelId, name, channelPrefix, maxSize, fileType, scope, domain);
+        return new ObjectChannel(channelId, name, channelPrefix, maxSize, fileType, processFile, scope, domain);
     }
 
     public ObjectInfo getObjectInfo(String objectId) {

+ 2 - 1
oss-console/src/main/java/cn/reghao/oss/console/app/service/UploadChannelService.java

@@ -62,8 +62,9 @@ public class UploadChannelService {
         String name = uploadChannel.getName();
         long maxSize = uploadChannel.getMaxSize();
         int fileType = uploadChannel.getFileType();
+        boolean processFile = uploadChannel.getProcessFile();
         int scope = uploadChannel.getScope();
-        ObjectChannel channel = new ObjectChannel(channelId, name, channelPrefix, maxSize, fileType, scope, domain);
+        ObjectChannel channel = new ObjectChannel(channelId, name, channelPrefix, maxSize, fileType, processFile, scope, domain);
 
         String host = storeNode.getIpv4Addr();
         int port = storeNode.getRpcPort();

+ 8 - 4
oss-store/src/main/java/cn/reghao/oss/store/db/repository/ImageRepository.java

@@ -1,9 +1,11 @@
 package cn.reghao.oss.store.db.repository;
 
 import cn.reghao.oss.store.api.constant.UploadChannel;
+import cn.reghao.oss.store.api.dto.ObjectChannel;
 import cn.reghao.oss.store.api.dto.media.ImageUrlDto;
 import cn.reghao.oss.store.db.mapper.ImageFileMapper;
 import cn.reghao.oss.store.model.po.ImageFile;
+import cn.reghao.oss.store.service.ObjectChannelService;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -20,6 +22,7 @@ import java.util.stream.Collectors;
 public class ImageRepository {
     private final ImageFileMapper imageFileMapper;
     private final ObjectRepository objectRepository;
+    private ObjectChannelService objectChannelService;
 
     public ImageRepository(ImageFileMapper imageFileMapper, ObjectRepository objectRepository) {
         this.imageFileMapper = imageFileMapper;
@@ -52,10 +55,10 @@ public class ImageRepository {
         return imageFileMapper.findByImageFileId(imageFileId);
     }
 
-    public List<ImageUrlDto> getImageUrls(int channelId, Set<String> imageFileIds) {
+    public List<ImageUrlDto> getImageUrls(Set<String> imageFileIds) {
         List<ImageUrlDto> list = new ArrayList<>();
         for (String imageFileId : imageFileIds) {
-            ImageUrlDto imageUrlDto = getImageUrl(channelId, imageFileId);
+            ImageUrlDto imageUrlDto = getImageUrl(imageFileId);
             if (imageUrlDto != null) {
                 list.add(imageUrlDto);
             }
@@ -64,7 +67,7 @@ public class ImageRepository {
         return list;
     }
 
-    public ImageUrlDto getImageUrl(int channelId, String imageFileId) {
+    public ImageUrlDto getImageUrl(String imageFileId) {
         List<ImageFile> list = imageFileMapper.findByImageFileId(imageFileId);
         if (list.isEmpty()) {
             return null;
@@ -74,7 +77,8 @@ public class ImageRepository {
         ImageFile original = list.get(0);
         imageUrlDto.setOriginalUrl(original.getUrl());
 
-        if (channelId == UploadChannel.photo.getCode()) {
+        ObjectChannel objectChannel = objectChannelService.getObjectChannel(original.getUrl());
+        if (objectChannel != null && objectChannel.getProcessFile()) {
             imageUrlDto.setThumbnailUrl(list.get(1).getUrl());
         } else {
             imageUrlDto.setThumbnailUrl(original.getUrl());

+ 0 - 13
oss-store/src/main/java/cn/reghao/oss/store/rpc/SignService.java

@@ -27,19 +27,6 @@ public class SignService {
         this.objectChannelService = objectChannelService;
     }
 
-    /*public String getSignedUrl(int loginUser, String url, int channelId, long expire) {
-        long timestamp = System.currentTimeMillis() + expire*1000;
-        String action = ChannelAction.access.getName();
-        OssPayload ossPayload = new OssPayload(action, channelId, loginUser);
-
-        String token = JwtUtil.createToken(ossPayload, timestamp, secretKey);
-        String nonce = UUID.randomUUID().toString();
-        String queryString = String.format("token=%s&t=%s&nonce=%s", token, timestamp, nonce);
-        String requestString = String.format("%s%s?%s", "GET", url, queryString);
-        String sign = SignatureUtil.sign(requestString, secretKey);
-        return String.format("%s?token=%s&t=%s&nonce=%s&sign=%s", url, token, timestamp, nonce, sign);
-    }*/
-
     public String getSignedUrl(String url, int expire) {
         int loginUser = UserContext.getUser();
         long timestamp = System.currentTimeMillis() + expire*1000L;

+ 6 - 4
oss-store/src/main/java/cn/reghao/oss/store/rpc/media/AudioFileServiceImpl.java

@@ -21,12 +21,15 @@ import java.util.stream.Collectors;
 @DubboService
 @Service
 public class AudioFileServiceImpl implements AudioFileService {
-    private AudioFileMapper audioFileMapper;
-    private ObjectService objectService;
+    private final AudioFileMapper audioFileMapper;
+    private final ObjectService objectService;
     private final AudioRepository audioRepository;
     private final SignService signService;
 
-    public AudioFileServiceImpl(AudioRepository audioRepository, SignService signService) {
+    public AudioFileServiceImpl(AudioFileMapper audioFileMapper, ObjectService objectService,
+                                AudioRepository audioRepository, SignService signService) {
+        this.audioFileMapper = audioFileMapper;
+        this.objectService = objectService;
         this.audioRepository = audioRepository;
         this.signService = signService;
     }
@@ -41,7 +44,6 @@ public class AudioFileServiceImpl implements AudioFileService {
 
     @Override
     public void deleteAudioFile(String audioFileId) {
-
     }
 
     @Override

+ 7 - 7
oss-store/src/main/java/cn/reghao/oss/store/rpc/media/ImageFileServiceImpl.java

@@ -23,14 +23,15 @@ import java.util.stream.Collectors;
 @DubboService
 @Service
 public class ImageFileServiceImpl implements ImageFileService {
-    private ImageFileMapper imageFileMapper;
-    private ObjectService objectService;
+    private final ImageFileMapper imageFileMapper;
+    private final ObjectService objectService;
     private final ImageRepository imageRepository;
-    private final SignService signService;
 
-    public ImageFileServiceImpl(ImageRepository imageRepository, SignService signService) {
+    public ImageFileServiceImpl(ImageFileMapper imageFileMapper, ObjectService objectService,
+                                ImageRepository imageRepository) {
+        this.imageFileMapper = imageFileMapper;
+        this.objectService = objectService;
         this.imageRepository = imageRepository;
-        this.signService = signService;
     }
 
     @Override
@@ -48,8 +49,7 @@ public class ImageFileServiceImpl implements ImageFileService {
 
     @Override
     public List<ImageUrlDto> getImageUrls(Set<String> imageFileIds) {
-        int channelId = UploadChannel.photo.getCode();
-        List<ImageUrlDto> list = imageRepository.getImageUrls(channelId, imageFileIds);
+        List<ImageUrlDto> list = imageRepository.getImageUrls(imageFileIds);
         return list;
     }
 }

+ 6 - 3
oss-store/src/main/java/cn/reghao/oss/store/rpc/media/VideoFileServiceImpl.java

@@ -27,13 +27,16 @@ import java.util.stream.Collectors;
 @Service
 public class VideoFileServiceImpl implements VideoFileService {
     private final LocalDateTime epoch = LocalDateTime.parse("1970-01-01T08:00");
-    private VideoFileMapper videoFileMapper;
-    private ObjectService objectService;
+    private final VideoFileMapper videoFileMapper;
+    private final ObjectService objectService;
     private final VideoRepository videoRepository;
     private final ObjectRepository objectRepository;
     private final SignService signService;
 
-    public VideoFileServiceImpl(VideoRepository videoRepository, ObjectRepository objectRepository, SignService signService) {
+    public VideoFileServiceImpl(VideoFileMapper videoFileMapper, ObjectService objectService,
+                                VideoRepository videoRepository, ObjectRepository objectRepository, SignService signService) {
+        this.videoFileMapper = videoFileMapper;
+        this.objectService = objectService;
         this.videoRepository = videoRepository;
         this.objectRepository = objectRepository;
         this.signService = signService;

+ 11 - 2
oss-store/src/main/java/cn/reghao/oss/store/service/ObjectChannelService.java

@@ -50,6 +50,15 @@ public class ObjectChannelService {
     }
 
     public int getChannelId(String url) {
+        ObjectChannel objectChannel = getObjectChannel(url);
+        if (objectChannel == null) {
+            return -1;
+        }
+
+        return objectChannel.getChannelId();
+    }
+
+    public ObjectChannel getObjectChannel(String url) {
         String domain = "";
         String objectName = url.replace("//" + domain + "/", "");
         String nodeAddr = machineId.ipv4();
@@ -57,13 +66,13 @@ public class ObjectChannelService {
             List<ObjectChannel> list = ossConsoleClient.getObjectChannels(nodeAddr);
             for (ObjectChannel channel : list) {
                 if (objectName.startsWith(channel.getPrefix())) {
-                    return channel.getChannelId();
+                    return channel;
                 }
             }
         } catch (Exception e) {
             e.printStackTrace();
         }
 
-        return -1;
+        return null;
     }
 }

+ 7 - 4
oss-store/src/main/java/cn/reghao/oss/store/task/FileProcessor.java

@@ -40,11 +40,14 @@ public class FileProcessor {
         UploadFileRet uploadFileRet = null;
         int fileType = channel.getFileType();
         int channelId = channel.getChannelId();
+        boolean processFile = channel.getProcessFile();
         ObjectType objectType = ObjectType.getByCode(fileType);
         switch (objectType) {
             case Image:
-                uploadFileRet = imageFileProcessor.processImage(objectResult, channelId);
-                setUrl(channelId, uploadFileRet);
+                uploadFileRet = imageFileProcessor.processImage(objectResult, processFile);
+                if (!processFile) {
+                    setUrl(uploadFileRet);
+                }
                 break;
             case Video:
                 uploadFileRet = videoFileProcessor.process(objectResult);
@@ -63,9 +66,9 @@ public class FileProcessor {
         return uploadFileRet;
     }
 
-    private void setUrl(int channelId, UploadFileRet uploadFileRet) {
+    private void setUrl(UploadFileRet uploadFileRet) {
         String uploadId = uploadFileRet.getUploadId();
-        String url = imageRepository.getImageUrl(channelId, uploadId).getOriginalUrl();
+        String url = imageRepository.getImageUrl(uploadId).getOriginalUrl();
         uploadFileRet.setUrl(url);
     }
 }

+ 5 - 5
oss-store/src/main/java/cn/reghao/oss/store/task/processor/ImageFileProcessor.java

@@ -40,14 +40,14 @@ public class ImageFileProcessor {
         this.putObjectService = putObjectService;
     }
 
-    public UploadFileRet processImage(ObjectResult objectResult, int channelId) throws Exception {
+    public UploadFileRet processImage(ObjectResult objectResult, boolean processFile) throws Exception {
         String objectName = objectResult.getObjectName();
         String objectId = objectResult.getObjectId();
         String imageFileId = objectId;
         String objectUrl = objectNameService.getObjectUrl(objectName);
         boolean duplicate = objectResult.isDuplicate();
         if (duplicate) {
-            return processDuplicate(objectResult,channelId);
+            return processDuplicate(objectResult,processFile);
         }
 
         String absolutePath = objectResult.getAbsolutePath();
@@ -64,7 +64,7 @@ public class ImageFileProcessor {
         int height = size.getHeight();
         List<ImageFile> list = new ArrayList<>();
         list.add(new ImageFile(imageFileId, objectId, format, objectUrl, width, height));
-        if (channelId == UploadChannel.photo.getCode()) {
+        if (processFile) {
             ImageFile imageFile = getConvertedImageFile(objectResult, "webp", width, height);
             list.add(imageFile);
         }
@@ -73,7 +73,7 @@ public class ImageFileProcessor {
         return new UploadFileRet(objectId, null);
     }
 
-    private UploadFileRet processDuplicate(ObjectResult objectResult, int channelId) throws Exception {
+    private UploadFileRet processDuplicate(ObjectResult objectResult, boolean processFile) throws Exception {
         String objectName = objectResult.getObjectName();
         String objectId = objectResult.getObjectId();
         String imageFileId = objectId;
@@ -85,7 +85,7 @@ public class ImageFileProcessor {
         List<ImageFile> list = new ArrayList<>();
         list.add(imageFile1);
 
-        if (channelId == UploadChannel.photo.getCode()) {
+        if (processFile) {
             if (imageFiles.size() > 1) {
                 for (int i = 1; i < imageFiles.size(); i++) {
                     ImageFile imageFile2 = imageFiles.get(i);

+ 1 - 0
store-api/src/main/java/cn/reghao/oss/store/api/dto/ObjectChannel.java

@@ -19,6 +19,7 @@ public class ObjectChannel implements Serializable {
     private String prefix;
     private Long maxSize;
     private Integer fileType;
+    private Boolean processFile;
     private Integer scope;
     private String domain;
 }