reghao 2 роки тому
батько
коміт
33f81fb5e8
21 змінених файлів з 360 додано та 250 видалено
  1. 1 1
      dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/DataBlockMapper.java
  2. 0 6
      dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/ImageFileMapper.java
  3. 1 1
      dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/VideoFileMapper.java
  4. 1 2
      dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/VideoUrlMapper.java
  5. 31 0
      dfs-store/src/main/java/cn/reghao/dfs/store/db/repository/AudioRepository.java
  6. 71 0
      dfs-store/src/main/java/cn/reghao/dfs/store/db/repository/ImageRepository.java
  7. 0 80
      dfs-store/src/main/java/cn/reghao/dfs/store/db/repository/MediaRepository.java
  8. 39 1
      dfs-store/src/main/java/cn/reghao/dfs/store/db/repository/ObjectRepository.java
  9. 64 0
      dfs-store/src/main/java/cn/reghao/dfs/store/db/repository/VideoRepository.java
  10. 0 64
      dfs-store/src/main/java/cn/reghao/dfs/store/rpc/MediaServiceImpl.java
  11. 0 49
      dfs-store/src/main/java/cn/reghao/dfs/store/rpc/MediaUrlServiceImpl.java
  12. 25 2
      dfs-store/src/main/java/cn/reghao/dfs/store/rpc/ObjectServiceImpl.java
  13. 26 0
      dfs-store/src/main/java/cn/reghao/dfs/store/rpc/media/AudioFileServiceImpl.java
  14. 28 0
      dfs-store/src/main/java/cn/reghao/dfs/store/rpc/media/ImageFileServiceImpl.java
  15. 43 0
      dfs-store/src/main/java/cn/reghao/dfs/store/rpc/media/VideoFileServiceImpl.java
  16. 8 8
      dfs-store/src/main/java/cn/reghao/dfs/store/task/AudioFileProcessor.java
  17. 12 12
      dfs-store/src/main/java/cn/reghao/dfs/store/task/ImageFileProcessor.java
  18. 8 8
      dfs-store/src/main/java/cn/reghao/dfs/store/task/VideoFileProcessor.java
  19. 0 14
      dfs-store/src/main/resources/mapper/ImageFileMapper.xml
  20. 1 1
      dfs-store/src/main/resources/mapper/VideoFileMapper.xml
  21. 1 1
      dfs-store/src/main/resources/mapper/VideoUrlMapper.xml

+ 1 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/DataBlockMapper.java

@@ -18,6 +18,6 @@ public interface DataBlockMapper extends BaseMapper<DataBlock> {
     @Deprecated
     void updateBatch(List<DataBlock> list);
 
-    List<DataBlock> findByContentId(String contentId);
+    DataBlock findByContentId(String contentId);
     List<DataBlock> findDataBlocks(@Param("pageSize") int pageSize, @Param("nextId") int nextId);
 }

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

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

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

@@ -3,7 +3,7 @@ package cn.reghao.dfs.store.db.mapper;
 import cn.reghao.dfs.store.model.po.VideoFile;
 import cn.reghao.jutil.jdk.db.BaseMapper;
 import cn.reghao.jutil.jdk.db.Page;
-import cn.reghao.oss.api.dto.VideoInfo;
+import cn.reghao.oss.api.dto.media.VideoInfo;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;

+ 1 - 2
dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/VideoUrlMapper.java

@@ -1,11 +1,10 @@
 package cn.reghao.dfs.store.db.mapper;
 
-import cn.reghao.oss.api.dto.VideoUrlDto;
+import cn.reghao.oss.api.dto.media.VideoUrlDto;
 import cn.reghao.dfs.store.model.po.VideoUrl;
 import cn.reghao.jutil.jdk.db.BaseMapper;
 import cn.reghao.jutil.jdk.db.Page;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 

+ 31 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/db/repository/AudioRepository.java

@@ -0,0 +1,31 @@
+package cn.reghao.dfs.store.db.repository;
+
+import cn.reghao.dfs.store.db.mapper.*;
+import cn.reghao.dfs.store.model.po.*;
+import cn.reghao.oss.api.dto.media.AudioInfo;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author reghao
+ * @date 2023-08-28 15:00:43
+ */
+@Repository
+public class AudioRepository {
+    private final AudioFileMapper audioFileMapper;
+
+    public AudioRepository(AudioFileMapper audioFileMapper) {
+        this.audioFileMapper = audioFileMapper;
+    }
+
+    public void saveAudioFile(AudioFile audioFile) {
+        audioFileMapper.save(audioFile);
+    }
+
+    public AudioFile findAudioFile(String audioFileId) {
+        return audioFileMapper.findByAudioFileId(audioFileId);
+    }
+
+    public AudioInfo getAudioInfo(String audioFileId) {
+        return null;
+    }
+}

+ 71 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/db/repository/ImageRepository.java

@@ -0,0 +1,71 @@
+package cn.reghao.dfs.store.db.repository;
+
+import cn.reghao.dfs.store.db.mapper.*;
+import cn.reghao.dfs.store.model.po.*;
+import cn.reghao.oss.api.dto.media.ImageUrlDto;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2023-08-28 15:00:43
+ */
+@Repository
+public class ImageRepository {
+    private final ImageFileMapper imageFileMapper;
+    private final ImageUrlMapper imageUrlMapper;
+
+    public ImageRepository(ImageFileMapper imageFileMapper, ImageUrlMapper imageUrlMapper) {
+        this.imageFileMapper = imageFileMapper;
+        this.imageUrlMapper = imageUrlMapper;
+    }
+
+    public void saveImageFile(ImageFile imageFile) {
+        imageFileMapper.save(imageFile);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void saveImageFile(ImageFile imageFile, List<ImageUrl> imageUrls) {
+        imageFileMapper.save(imageFile);
+        if (!imageUrls.isEmpty()) {
+            imageUrlMapper.saveAll(imageUrls);
+        }
+    }
+
+    public List<ImageUrlDto> getImageUrls(List<String> imageFileIds) {
+        List<ImageUrlDto> list = new ArrayList<>();
+        for (String imageFileId : imageFileIds) {
+            ImageUrlDto imageUrlDto = getImageUrl(imageFileId);
+            list.add(imageUrlDto);
+        }
+
+        return list;
+    }
+
+    public List<ImageUrl> getImageUrls(String imageFileId) {
+        return imageUrlMapper.findByImageFileId(imageFileId);
+    }
+
+    public ImageUrlDto getImageUrl(String imageFileId) {
+        List<ImageUrl> list = imageUrlMapper.findByImageFileId(imageFileId);
+        ImageUrlDto imageUrlDto = new ImageUrlDto(imageFileId);
+        for (ImageUrl imageUrl : list) {
+            String format = imageUrl.getFormat();
+            String url = imageUrl.getUrl();
+            if ("webp".equals(format)) {
+                imageUrlDto.setThumbnailUrl(url);
+            } else {
+                imageUrlDto.setOriginalUrl(url);
+            }
+        }
+
+        return imageUrlDto;
+    }
+
+    public ImageFile getImageFile(String imageFileId) {
+        return imageFileMapper.findByImageFileId(imageFileId);
+    }
+}

+ 0 - 80
dfs-store/src/main/java/cn/reghao/dfs/store/db/repository/MediaRepository.java

@@ -1,80 +0,0 @@
-package cn.reghao.dfs.store.db.repository;
-
-import cn.reghao.dfs.store.db.mapper.*;
-import cn.reghao.dfs.store.model.po.*;
-import cn.reghao.oss.api.dto.VideoUrlDto;
-import org.springframework.cache.annotation.Cacheable;
-import org.springframework.stereotype.Repository;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2023-06-13 11:00:43
- */
-@Repository
-public class MediaRepository {
-    private final ImageFileMapper imageFileMapper;
-    private final ImageUrlMapper imageUrlMapper;
-    private final AudioFileMapper audioFileMapper;
-    private final VideoFileMapper videoFileMapper;
-    private final VideoUrlMapper videoUrlMapper;
-
-    public MediaRepository(ImageFileMapper imageFileMapper, ImageUrlMapper imageUrlMapper,
-                           AudioFileMapper audioFileMapper,
-                           VideoFileMapper videoFileMapper, VideoUrlMapper videoUrlMapper) {
-        this.imageFileMapper = imageFileMapper;
-        this.imageUrlMapper = imageUrlMapper;
-        this.audioFileMapper = audioFileMapper;
-        this.videoFileMapper = videoFileMapper;
-        this.videoUrlMapper = videoUrlMapper;
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    public void saveVideoFile(VideoFile videoFile, VideoUrl videoUrl) {
-        videoFileMapper.save(videoFile);
-        videoUrlMapper.save(videoUrl);
-    }
-
-    public void saveImageFile(ImageFile imageFile) {
-        imageFileMapper.save(imageFile);
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    public void saveImageFile(ImageFile imageFile, List<ImageUrl> imageUrls) {
-        imageFileMapper.save(imageFile);
-        if (!imageUrls.isEmpty()) {
-            imageUrlMapper.saveAll(imageUrls);
-        }
-    }
-
-    public void saveAudioFile(AudioFile audioFile) {
-        audioFileMapper.save(audioFile);
-    }
-
-    public VideoFile findVideoFile(String videoFileId) {
-        return videoFileMapper.findByVideoFileId(videoFileId);
-    }
-
-    public VideoUrl findVideoUrl(String videoFileId) {
-        return videoUrlMapper.findHighestQuality(videoFileId);
-    }
-
-    public List<ImageUrl> findImageUrls(String imageFileId) {
-        return imageUrlMapper.findByImageFileId(imageFileId);
-    }
-
-    @Cacheable(cacheNames = "oss:store:videoUrls", key = "#videoFileId", unless = "#result.empty")
-    public List<VideoUrlDto> findVideoUrls(String videoFileId) {
-        return videoUrlMapper.findVideoUrls(videoFileId);
-    }
-
-    public ImageFile findImageFile(String imageFileId) {
-        return imageFileMapper.findByImageFileId(imageFileId);
-    }
-
-    public AudioFile findAudioFile(String audioFileId) {
-        return audioFileMapper.findByAudioFileId(audioFileId);
-    }
-}

+ 39 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/db/repository/ObjectRepository.java

@@ -6,11 +6,13 @@ import cn.reghao.dfs.store.model.po.DataBlock;
 import cn.reghao.dfs.store.model.po.FileMeta;
 import cn.reghao.oss.api.dto.ObjectMeta;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FileUtils;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.File;
 import java.util.List;
 
 /**
@@ -51,6 +53,11 @@ public class ObjectRepository {
         return fileMetaMapper.findByObjectName(objectName);
     }
 
+    public FileMeta getByObjectId(String objectId) {
+        log.info("cache miss");
+        return fileMetaMapper.findByObjectId(objectId);
+    }
+
     @Cacheable(cacheNames = "oss:store:fileMeta", key = "#sha256sum", unless = "#result == null")
     public FileMeta getBySha256sum(String sha256sum) {
         return fileMetaMapper.findBySha256sum(sha256sum);
@@ -69,6 +76,37 @@ public class ObjectRepository {
         FileMeta fileMeta = fileMetaMapper.findByObjectName(objectName);
         String contentId = fileMeta.getContentId();
         List<FileMeta> list = fileMetaMapper.findByContentId(contentId);
-        List<DataBlock> list1 = dataBlockMapper.findByContentId(contentId);
+        if (list.size() == 1) {
+            FileMeta fileMeta1 = list.get(0);
+            DataBlock dataBlock = dataBlockMapper.findByContentId(contentId);
+            String absolutePath = dataBlock.getAbsolutePath();
+
+            fileMetaMapper.delete(fileMeta1);
+            dataBlockMapper.delete(dataBlock);
+            FileUtils.deleteQuietly(new File(absolutePath));
+        } else {
+            fileMetaMapper.delete(fileMeta);
+        }
+    }
+
+    public void deleteByObjectId(String objectId) {
+        FileMeta fileMeta = fileMetaMapper.findByObjectId(objectId);
+        String contentId = fileMeta.getContentId();
+        List<FileMeta> list = fileMetaMapper.findByContentId(contentId);
+        if (list.size() == 1) {
+            FileMeta fileMeta1 = list.get(0);
+            DataBlock dataBlock = dataBlockMapper.findByContentId(contentId);
+            String absolutePath = dataBlock.getAbsolutePath();
+
+            fileMetaMapper.delete(fileMeta1);
+            dataBlockMapper.delete(dataBlock);
+            FileUtils.deleteQuietly(new File(absolutePath));
+        } else {
+            fileMetaMapper.delete(fileMeta);
+        }
+    }
+
+    public void deleteByObjectIds(List<String> objectIds) {
+        objectIds.forEach(this::deleteByObjectId);
     }
 }

+ 64 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/db/repository/VideoRepository.java

@@ -0,0 +1,64 @@
+package cn.reghao.dfs.store.db.repository;
+
+import cn.reghao.dfs.store.db.mapper.*;
+import cn.reghao.dfs.store.model.po.*;
+import cn.reghao.oss.api.dto.media.VideoInfo;
+import cn.reghao.oss.api.dto.media.VideoUrlDto;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2023-08-28 15:00:43
+ */
+@Repository
+public class VideoRepository {
+    private final VideoFileMapper videoFileMapper;
+    private final VideoUrlMapper videoUrlMapper;
+
+    public VideoRepository(VideoFileMapper videoFileMapper, VideoUrlMapper videoUrlMapper) {
+        this.videoFileMapper = videoFileMapper;
+        this.videoUrlMapper = videoUrlMapper;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void saveVideoFile(VideoFile videoFile, VideoUrl videoUrl) {
+        videoFileMapper.save(videoFile);
+        videoUrlMapper.save(videoUrl);
+    }
+
+    public VideoInfo getVideoInfo(String videoFileId) {
+        return videoFileMapper.findVideoInfo(videoFileId);
+    }
+
+    public VideoFile findVideoFile(String videoFileId) {
+        return videoFileMapper.findByVideoFileId(videoFileId);
+    }
+
+    public VideoUrl findVideoUrl(String videoFileId) {
+        return videoUrlMapper.findHighestQuality(videoFileId);
+    }
+
+    @Cacheable(cacheNames = "oss:store:videoUrls", key = "#videoFileId", unless = "#result.empty")
+    public List<VideoUrlDto> findVideoUrls(String videoFileId) {
+        return videoUrlMapper.findVideoUrls(videoFileId);
+    }
+
+    public List<String> deleteVideoFile(String videoFileId) {
+        List<String> objectIds = new ArrayList<>();
+        List<VideoUrl> list = videoUrlMapper.findByVideoFileId(videoFileId);
+        for (VideoUrl videoUrl : list) {
+            String objectId = videoUrl.getObjectId();
+            objectIds.add(objectId);
+            videoUrlMapper.delete(videoUrl);
+        }
+
+        VideoFile videoFile = videoFileMapper.findByVideoFileId(videoFileId);
+        videoFileMapper.delete(videoFile);
+        return objectIds;
+    }
+}

+ 0 - 64
dfs-store/src/main/java/cn/reghao/dfs/store/rpc/MediaServiceImpl.java

@@ -1,64 +0,0 @@
-package cn.reghao.dfs.store.rpc;
-
-import cn.reghao.dfs.store.db.mapper.FileMetaMapper;
-import cn.reghao.dfs.store.db.mapper.ImageFileMapper;
-import cn.reghao.dfs.store.db.mapper.VideoFileMapper;
-import cn.reghao.dfs.store.model.po.FileMeta;
-import cn.reghao.dfs.store.service.ObjectNameService;
-import cn.reghao.dfs.store.util.JwtUtil;
-import cn.reghao.oss.api.dto.DownloadUrl;
-import cn.reghao.oss.api.dto.ImageUrl;
-import cn.reghao.oss.api.dto.OssPayload;
-import cn.reghao.oss.api.dto.VideoInfo;
-import cn.reghao.oss.api.iface.MediaService;
-import org.apache.dubbo.config.annotation.DubboService;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2023-06-10 16:33:09
- */
-@DubboService
-@Service
-public class MediaServiceImpl implements MediaService {
-    private final ImageFileMapper imageFileMapper;
-    private final VideoFileMapper videoFileMapper;
-    private final FileMetaMapper fileMetaMapper;
-    private final ObjectNameService objectNameService;
-
-    public MediaServiceImpl(ImageFileMapper imageFileMapper, VideoFileMapper videoFileMapper,
-                            FileMetaMapper fileMetaMapper, ObjectNameService objectNameService) {
-        this.imageFileMapper = imageFileMapper;
-        this.videoFileMapper = videoFileMapper;
-        this.fileMetaMapper = fileMetaMapper;
-        this.objectNameService = objectNameService;
-    }
-
-    @Override
-    public VideoInfo getVideoInfo(String videoFileId) {
-        return videoFileMapper.findVideoInfo(videoFileId);
-    }
-
-    @Override
-    public List<ImageUrl> getImageUrls(List<String> imageFileIds) {
-        return imageFileMapper.findImageUrls(imageFileIds);
-    }
-
-    @Override
-    public DownloadUrl getDownloadUrl(String objectId, int channelId, long userId) {
-        FileMeta fileMeta = fileMetaMapper.findByObjectId(objectId);
-        String objectName = fileMeta.getObjectName();
-        String url = objectNameService.getObjectUrl(objectName);
-        String url1 = String.format("%s?download", url);
-
-        String action = "download";
-        long expireAt = System.currentTimeMillis() + 3600*1000;
-        // String signKey = RandomString.getSalt(64);
-        String signKey = "oss.reghao.cn";
-        OssPayload ossPayload = new OssPayload(action, channelId, userId);
-        String token = JwtUtil.createToken(ossPayload, expireAt, signKey);
-        return new DownloadUrl(url1, token);
-    }
-}

+ 0 - 49
dfs-store/src/main/java/cn/reghao/dfs/store/rpc/MediaUrlServiceImpl.java

@@ -1,49 +0,0 @@
-package cn.reghao.dfs.store.rpc;
-
-import cn.reghao.dfs.store.db.repository.MediaRepository;
-import cn.reghao.dfs.store.model.po.VideoUrl;
-import cn.reghao.oss.api.dto.ImageUrl;
-import cn.reghao.oss.api.dto.VideoUrlDto;
-import cn.reghao.oss.api.iface.MediaUrlService;
-import cn.reghao.dfs.store.db.mapper.ImageFileMapper;
-import cn.reghao.dfs.store.db.mapper.VideoUrlMapper;
-import org.apache.dubbo.config.annotation.DubboService;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2023-01-12 14:44:02
- */
-@DubboService
-@Service
-public class MediaUrlServiceImpl implements MediaUrlService {
-    private final ImageFileMapper imageFileMapper;
-    private final VideoUrlMapper videoUrlMapper;
-    private final MediaRepository mediaRepository;
-
-    public MediaUrlServiceImpl(ImageFileMapper imageFileMapper, VideoUrlMapper videoUrlMapper,
-                               MediaRepository mediaRepository) {
-        this.imageFileMapper = imageFileMapper;
-        this.videoUrlMapper = videoUrlMapper;
-        this.mediaRepository = mediaRepository;
-    }
-
-    @Override
-    public ImageUrl getImageUrl(String imageFileId) {
-        return imageFileMapper.findImageUrl(imageFileId);
-    }
-
-    @Override
-    public List<VideoUrlDto> getVideoUrls(String videoFileId) {
-        return mediaRepository.findVideoUrls(videoFileId);
-    }
-
-    @Override
-    public String getDownloadLink(String videoFileId) {
-        VideoUrl videoUrl = mediaRepository.findVideoUrl(videoFileId);
-        String objectId = videoUrl.getObjectId();
-        return "";
-    }
-}

+ 25 - 2
dfs-store/src/main/java/cn/reghao/dfs/store/rpc/ObjectServiceImpl.java

@@ -1,9 +1,13 @@
 package cn.reghao.dfs.store.rpc;
 
+import cn.reghao.dfs.store.db.repository.ObjectRepository;
 import cn.reghao.dfs.store.model.po.FileMeta;
 import cn.reghao.dfs.store.service.ObjectNameService;
+import cn.reghao.dfs.store.util.JwtUtil;
+import cn.reghao.oss.api.dto.DownloadUrl;
 import cn.reghao.oss.api.dto.ObjectMeta;
 import cn.reghao.oss.api.dto.ObjectPrefix;
+import cn.reghao.oss.api.dto.OssPayload;
 import cn.reghao.oss.api.iface.ObjectService;
 import cn.reghao.dfs.store.db.mapper.FileMetaMapper;
 import org.apache.dubbo.config.annotation.DubboService;
@@ -20,10 +24,13 @@ import java.util.List;
 public class ObjectServiceImpl implements ObjectService {
     private final FileMetaMapper fileMetaMapper;
     private final ObjectNameService objectNameService;
+    private final ObjectRepository objectRepository;
 
-    public ObjectServiceImpl(FileMetaMapper fileMetaMapper, ObjectNameService objectNameService) {
+    public ObjectServiceImpl(FileMetaMapper fileMetaMapper, ObjectNameService objectNameService,
+                             ObjectRepository objectRepository) {
         this.fileMetaMapper = fileMetaMapper;
         this.objectNameService = objectNameService;
+        this.objectRepository = objectRepository;
     }
 
     @Override
@@ -44,6 +51,22 @@ public class ObjectServiceImpl implements ObjectService {
 
     @Override
     public ObjectMeta getObject(String objectName) {
-        return fileMetaMapper.findObjectMeta(objectName);
+        return objectRepository.getObjectMeta(objectName);
+    }
+
+    @Override
+    public DownloadUrl getDownloadUrl(String objectId, int channelId, long userId) {
+        FileMeta fileMeta = objectRepository.getByObjectId(objectId);
+        String objectName = fileMeta.getObjectName();
+        String url = objectNameService.getObjectUrl(objectName);
+        String url1 = String.format("%s?download", url);
+
+        String action = "download";
+        long expireAt = System.currentTimeMillis() + 3600*1000;
+        // String signKey = RandomString.getSalt(64);
+        String signKey = "oss.reghao.cn";
+        OssPayload ossPayload = new OssPayload(action, channelId, userId);
+        String token = JwtUtil.createToken(ossPayload, expireAt, signKey);
+        return new DownloadUrl(url1, token);
     }
 }

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

@@ -0,0 +1,26 @@
+package cn.reghao.dfs.store.rpc.media;
+
+import cn.reghao.dfs.store.db.repository.AudioRepository;
+import cn.reghao.oss.api.dto.media.AudioInfo;
+import cn.reghao.oss.api.iface.media.AudioFileService;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author reghao
+ * @date 2023-08-28 15:00:43
+ */
+@DubboService
+@Service
+public class AudioFileServiceImpl implements AudioFileService {
+    private final AudioRepository audioRepository;
+
+    public AudioFileServiceImpl(AudioRepository audioRepository) {
+        this.audioRepository = audioRepository;
+    }
+
+    @Override
+    public AudioInfo getAudioInfo(String audioFileId) {
+        return audioRepository.getAudioInfo(audioFileId);
+    }
+}

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

@@ -0,0 +1,28 @@
+package cn.reghao.dfs.store.rpc.media;
+
+import cn.reghao.dfs.store.db.repository.ImageRepository;
+import cn.reghao.oss.api.dto.media.ImageUrlDto;
+import cn.reghao.oss.api.iface.media.ImageFileService;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2023-08-28 15:00:43
+ */
+@DubboService
+@Service
+public class ImageFileServiceImpl implements ImageFileService {
+    private final ImageRepository imageRepository;
+
+    public ImageFileServiceImpl(ImageRepository imageRepository) {
+        this.imageRepository = imageRepository;
+    }
+
+    @Override
+    public List<ImageUrlDto> getImageUrls(List<String> imageFileIds) {
+        return imageRepository.getImageUrls(imageFileIds);
+    }
+}

+ 43 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/rpc/media/VideoFileServiceImpl.java

@@ -0,0 +1,43 @@
+package cn.reghao.dfs.store.rpc.media;
+
+import cn.reghao.dfs.store.db.repository.ObjectRepository;
+import cn.reghao.dfs.store.db.repository.VideoRepository;
+import cn.reghao.oss.api.dto.media.VideoInfo;
+import cn.reghao.oss.api.dto.media.VideoUrlDto;
+import cn.reghao.oss.api.iface.media.VideoFileService;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2023-08-28 15:00:43
+ */
+@DubboService
+@Service
+public class VideoFileServiceImpl implements VideoFileService {
+    private final VideoRepository videoRepository;
+    private final ObjectRepository objectRepository;
+
+    public VideoFileServiceImpl(VideoRepository videoRepository, ObjectRepository objectRepository) {
+        this.videoRepository = videoRepository;
+        this.objectRepository = objectRepository;
+    }
+
+    @Override
+    public VideoInfo getVideoInfo(String videoFileId) {
+        return videoRepository.getVideoInfo(videoFileId);
+    }
+
+    @Override
+    public List<VideoUrlDto> getVideoUrls(String videoFileId) {
+        return videoRepository.findVideoUrls(videoFileId);
+    }
+
+    @Override
+    public void deleteVideoFile(String videoFileId) {
+        List<String> objectIds = videoRepository.deleteVideoFile(videoFileId);
+        objectRepository.deleteByObjectIds(objectIds);
+    }
+}

+ 8 - 8
dfs-store/src/main/java/cn/reghao/dfs/store/task/AudioFileProcessor.java

@@ -1,6 +1,6 @@
 package cn.reghao.dfs.store.task;
 
-import cn.reghao.dfs.store.db.repository.MediaRepository;
+import cn.reghao.dfs.store.db.repository.AudioRepository;
 import cn.reghao.dfs.store.model.po.AudioFile;
 import cn.reghao.dfs.store.model.vo.ObjectProp;
 import cn.reghao.dfs.store.model.vo.ObjectResult;
@@ -29,16 +29,16 @@ import java.util.concurrent.ExecutorService;
 @Slf4j
 @Service
 public class AudioFileProcessor {
-    private final MediaRepository mediaRepository;
+    private final AudioRepository audioRepository;
     private final PutObjectService putObjectService;
     private final ObjectNameService objectNameService;
     private final FileStoreService fileStoreService;
     private final ExecutorService threadPool = ThreadPoolWrapper.threadPool("converter-pool", 10);
     private final Set<String> audioCodecs = Set.of("aac", "mp3");
 
-    public AudioFileProcessor(MediaRepository mediaRepository, PutObjectService putObjectService,
+    public AudioFileProcessor(AudioRepository audioRepository, PutObjectService putObjectService,
                               ObjectNameService objectNameService, FileStoreService fileStoreService) {
-        this.mediaRepository = mediaRepository;
+        this.audioRepository = audioRepository;
         this.putObjectService = putObjectService;
         this.objectNameService = objectNameService;
         this.fileStoreService = fileStoreService;
@@ -54,10 +54,10 @@ public class AudioFileProcessor {
             String url1 = objectNameService.getObjectUrl(objectResult1.getObjectName());
 
             String dupObjectId = objectResult.getDupObjectId();
-            AudioFile audioFile = mediaRepository.findAudioFile(dupObjectId);
+            AudioFile audioFile = audioRepository.findAudioFile(dupObjectId);
             String audioCodec = audioFile.getCodec();
             AudioFile audioFile1 = new AudioFile(audioFileId, objectId1, audioCodec, url1);
-            mediaRepository.saveAudioFile(audioFile1);
+            audioRepository.saveAudioFile(audioFile1);
             return new UploadFileRet(objectId1, url1, true);
         }
 
@@ -80,7 +80,7 @@ public class AudioFileProcessor {
         String objectId1 = objectResult1.getObjectId();
         String url1 = objectNameService.getObjectUrl(objectResult1.getObjectName());
         AudioFile audioFile = new AudioFile(audioFileId, objectId1, audioCodec, url1);
-        mediaRepository.saveAudioFile(audioFile);
+        audioRepository.saveAudioFile(audioFile);
         return new UploadFileRet(objectId1, url1, true);
     }
 
@@ -106,7 +106,7 @@ public class AudioFileProcessor {
             String url = objectNameService.getObjectUrl(objectResult.getObjectName());
             String codec = "aac";
             AudioFile audioFile = new AudioFile(audioFileId, objectId, codec, url);
-            mediaRepository.saveAudioFile(audioFile);
+            audioRepository.saveAudioFile(audioFile);
             return new UploadFileRet(objectId, url, true);
         } catch (Exception e) {
             e.printStackTrace();

+ 12 - 12
dfs-store/src/main/java/cn/reghao/dfs/store/task/ImageFileProcessor.java

@@ -1,6 +1,6 @@
 package cn.reghao.dfs.store.task;
 
-import cn.reghao.dfs.store.db.repository.MediaRepository;
+import cn.reghao.dfs.store.db.repository.ImageRepository;
 import cn.reghao.dfs.store.model.po.ImageUrl;
 import cn.reghao.dfs.store.model.vo.ObjectProp;
 import cn.reghao.dfs.store.model.vo.ObjectResult;
@@ -30,15 +30,15 @@ import java.util.UUID;
 @Slf4j
 @Service
 public class ImageFileProcessor {
-    private final MediaRepository mediaRepository;
+    private final ImageRepository imageRepository;
     private final FileStoreService fileStoreService;
     private final ObjectNameService objectNameService;
     private final PutObjectService putObjectService;
     private final Set<String> imageFormats = Set.of("jpg", "jpeg", "webp", "gif", "png");
 
-    public ImageFileProcessor(MediaRepository mediaRepository, FileStoreService fileStoreService,
+    public ImageFileProcessor(ImageRepository imageRepository, FileStoreService fileStoreService,
                               ObjectNameService objectNameService, PutObjectService putObjectService) {
-        this.mediaRepository = mediaRepository;
+        this.imageRepository = imageRepository;
         this.fileStoreService = fileStoreService;
         this.objectNameService = objectNameService;
         this.putObjectService = putObjectService;
@@ -50,12 +50,12 @@ public class ImageFileProcessor {
         boolean duplicate = objectResult.isDuplicate();
         if (duplicate) {
             String dupObjectId = objectResult.getDupObjectId();
-            ImageFile imageFile = mediaRepository.findImageFile(dupObjectId);
+            ImageFile imageFile = imageRepository.getImageFile(dupObjectId);
             int width = imageFile.getWidth();
             int height = imageFile.getHeight();
             ImageFile imageFile1 = new ImageFile(objectId, width, height);
 
-            List<ImageUrl> imageUrls = mediaRepository.findImageUrls(dupObjectId);
+            List<ImageUrl> imageUrls = imageRepository.getImageUrls(dupObjectId);
             if (imageUrls.size() > 1) {
                 log.info("{} 文件经过转码, 暂不处理", objectName);
                 return null;
@@ -66,7 +66,7 @@ public class ImageFileProcessor {
             String url = objectNameService.getObjectUrl(objectName);
             ImageUrl imageUrl1 = new ImageUrl(objectId, format, objectId, url, width, height);
 
-            mediaRepository.saveImageFile(imageFile1, List.of(imageUrl1));
+            imageRepository.saveImageFile(imageFile1, List.of(imageUrl1));
             return new UploadFileRet(objectId, url, true);
         }
 
@@ -81,7 +81,7 @@ public class ImageFileProcessor {
 
                 ImageFile imageFile = new ImageFile(objectId, width, height);
                 ImageUrl imageUrl = new ImageUrl(objectId, format, objectId, url, width, height);
-                mediaRepository.saveImageFile(imageFile, List.of(imageUrl));
+                imageRepository.saveImageFile(imageFile, List.of(imageUrl));
                 return new UploadFileRet(objectId, url, true);
             } else {
                 log.info("不支持 {} 格式的文件", format);
@@ -98,13 +98,13 @@ public class ImageFileProcessor {
         boolean duplicate = objectResult.isDuplicate();
         if (duplicate) {
             String dupObjectId = objectResult.getDupObjectId();
-            ImageFile imageFile = mediaRepository.findImageFile(dupObjectId);
+            ImageFile imageFile = imageRepository.getImageFile(dupObjectId);
             int width = imageFile.getWidth();
             int height = imageFile.getHeight();
             ImageFile imageFile1 = new ImageFile(objectId, width, height);
             List<ImageUrl> list = new ArrayList<>();
 
-            List<ImageUrl> imageUrls = mediaRepository.findImageUrls(dupObjectId);
+            List<ImageUrl> imageUrls = imageRepository.getImageUrls(dupObjectId);
             if (imageUrls.size() > 1) {
                 ImageUrl imageUrl = imageUrls.get(1);
                 ObjectResult objectResult1 = getCopiedObject(imageUrl.getUrl());
@@ -123,7 +123,7 @@ public class ImageFileProcessor {
             ImageUrl imageUrl1 = new ImageUrl(objectId, format, objectId, url, width, height);
             list.add(imageUrl1);
 
-            mediaRepository.saveImageFile(imageFile1, list);
+            imageRepository.saveImageFile(imageFile1, list);
             return new UploadFileRet(objectId, url, true);
         }
 
@@ -147,7 +147,7 @@ public class ImageFileProcessor {
                     imageUrls.add(new ImageUrl(objectId, "webp", webpObjectId, webpUrl, width, height));
                 }
 
-                mediaRepository.saveImageFile(imageFile, imageUrls);
+                imageRepository.saveImageFile(imageFile, imageUrls);
                 return new UploadFileRet(objectId, url, true);
             } else {
                 log.info("不支持 {} 格式的文件", format);

+ 8 - 8
dfs-store/src/main/java/cn/reghao/dfs/store/task/VideoFileProcessor.java

@@ -1,6 +1,6 @@
 package cn.reghao.dfs.store.task;
 
-import cn.reghao.dfs.store.db.repository.MediaRepository;
+import cn.reghao.dfs.store.db.repository.VideoRepository;
 import cn.reghao.jutil.media.model.AudioProps;
 import cn.reghao.jutil.media.model.MediaProps;
 import cn.reghao.jutil.media.model.VideoProps;
@@ -34,7 +34,7 @@ import java.util.concurrent.ExecutorService;
 @Slf4j
 @Service
 public class VideoFileProcessor {
-    private final MediaRepository mediaRepository;
+    private VideoRepository videoRepository;
     private final PutObjectService putObjectService;
     private final ObjectNameService objectNameService;
     private final FileStoreService fileStoreService;
@@ -42,9 +42,9 @@ public class VideoFileProcessor {
     private final Set<String> audioCodecs = Set.of("aac", "mp3");
     private final Set<String> videoCodecs = Set.of("h264");
 
-    public VideoFileProcessor(MediaRepository mediaRepository, PutObjectService putObjectService,
+    public VideoFileProcessor(VideoRepository videoRepository, PutObjectService putObjectService,
                               ObjectNameService objectNameService, FileStoreService fileStoreService) {
-        this.mediaRepository = mediaRepository;
+        this.videoRepository = videoRepository;
         this.putObjectService = putObjectService;
         this.objectNameService = objectNameService;
         this.fileStoreService = fileStoreService;
@@ -56,12 +56,12 @@ public class VideoFileProcessor {
         boolean duplicate = objectResult.isDuplicate();
         if (duplicate) {
             String dupObjectId = objectResult.getDupObjectId();
-            VideoFile videoFile = mediaRepository.findVideoFile(dupObjectId);
+            VideoFile videoFile = videoRepository.findVideoFile(dupObjectId);
             boolean horizontal = videoFile.getHorizontal();
             int duration = videoFile.getDuration();
             VideoFile videoFile1 = new VideoFile(videoFileId, horizontal, duration);
 
-            VideoUrl videoUrl = mediaRepository.findVideoUrl(dupObjectId);
+            VideoUrl videoUrl = videoRepository.findVideoUrl(dupObjectId);
             String videoFileId1 = videoUrl.getVideoFileId();
             String urlObjectId = videoUrl.getObjectId();
             if (!videoFileId1.equals(urlObjectId)) {
@@ -78,7 +78,7 @@ public class VideoFileProcessor {
             int order = 1;
             VideoUrl videoUrl1 = new VideoUrl(videoFileId, videoFileId, urlType, url, bitRate, quality, width, height, order);
 
-            mediaRepository.saveVideoFile(videoFile1, videoUrl1);
+            videoRepository.saveVideoFile(videoFile1, videoUrl1);
             return new UploadFileRet(videoFileId, url, true);
         }
 
@@ -124,7 +124,7 @@ public class VideoFileProcessor {
         MediaResolution mediaResolution = MediaQuality.getQuality(width, height);
         String urlType = FileType.getVideoUrlType(absolutePath);
         VideoUrl videoUrl  = new VideoUrl(videoFileId, videoFileId, urlType, originalUrl, bitRate, mediaResolution);
-        mediaRepository.saveVideoFile(videoFile, videoUrl);
+        videoRepository.saveVideoFile(videoFile, videoUrl);
         return new UploadFileRet(videoFileId, originalUrl, true);
         //log.info("添加视频格式转码任务");
         //threadPool.submit(new ConvertTask());

+ 0 - 14
dfs-store/src/main/resources/mapper/ImageFileMapper.xml

@@ -30,18 +30,4 @@
         select * from image_file
         where image_file_id=#{imageFileId}
     </select>
-    <select id="findImageUrl" resultType="cn.reghao.oss.api.dto.ImageUrl">
-        select jpeg_url,webp_url,thumbnail_url
-        from image_file
-        where image_file_id=#{imageFileId}
-    </select>
-
-    <select id="findImageUrls" resultType="cn.reghao.oss.api.dto.ImageUrl">
-        select image_file_id,jpeg_url,webp_url,thumbnail_url
-        from image_file
-        where image_file_id in
-        <foreach collection="list" item="id" index="index" open="(" close=")" separator=",">
-            #{id}
-        </foreach>
-    </select>
 </mapper>

+ 1 - 1
dfs-store/src/main/resources/mapper/VideoFileMapper.xml

@@ -15,7 +15,7 @@
     <select id="findVideoFileByPage" resultType="cn.reghao.dfs.store.model.po.VideoFile">
         select * from video_file
     </select>
-    <select id="findVideoInfo" resultType="cn.reghao.oss.api.dto.VideoInfo">
+    <select id="findVideoInfo" resultType="cn.reghao.oss.api.dto.media.VideoInfo">
         select video_file.video_file_id,video_file.duration,video_file.horizontal,video_url.quality
         from video_file
         inner join video_url

+ 1 - 1
dfs-store/src/main/resources/mapper/VideoUrlMapper.xml

@@ -12,7 +12,7 @@
     <select id="findAll" resultType="cn.reghao.dfs.store.model.po.VideoUrl">
         select * from video_url
     </select>
-    <select id="findVideoUrls" resultType="cn.reghao.oss.api.dto.VideoUrlDto">
+    <select id="findVideoUrls" resultType="cn.reghao.oss.api.dto.media.VideoUrlDto">
         select url_type as type,url,width,height,quality
         from video_url
         where video_file_id=#{videoFileId}