reghao 2 lat temu
rodzic
commit
cdec863a2a

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

@@ -1,9 +1,12 @@
 package cn.reghao.dfs.store.db.mapper;
 
 import cn.reghao.dfs.store.model.po.ImageFile;
+import cn.reghao.dfs.store.model.vo.ImageObject;
 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
@@ -11,6 +14,8 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface ImageFileMapper extends BaseMapper<ImageFile> {
     void deleteByImageFileId(String imageFileId);
+    void deleteByImageFileIds(List<String> list);
 
     ImageFile findByImageFileId(String imageFileId);
+    List<ImageObject> findAll1();
 }

+ 3 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/db/mapper/ImageUrlMapper.java

@@ -1,6 +1,7 @@
 package cn.reghao.dfs.store.db.mapper;
 
 import cn.reghao.dfs.store.model.po.ImageUrl;
+import cn.reghao.dfs.store.model.vo.ImageObject;
 import cn.reghao.jutil.jdk.db.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 
@@ -14,5 +15,7 @@ import java.util.List;
 public interface ImageUrlMapper extends BaseMapper<ImageUrl> {
     void deleteByImageFileId(String imageFileId);
 
+    List<ImageUrl> findByImageFileIds(List<String> list);
     List<ImageUrl> findByImageFileId(String imageFileId);
+    List<ImageObject> findAll1();
 }

+ 13 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/ImageObject.java

@@ -0,0 +1,13 @@
+package cn.reghao.dfs.store.model.vo;
+
+import lombok.Getter;
+
+/**
+ * @author reghao
+ * @date 2023-09-10 18:02:28
+ */
+@Getter
+public class ImageObject {
+    private String imageFileId;
+    private String objectId;
+}

+ 12 - 8
dfs-store/src/main/java/cn/reghao/dfs/store/rpc/PermissionServiceImpl.java

@@ -1,11 +1,9 @@
 package cn.reghao.dfs.store.rpc;
 
-import cn.reghao.dfs.store.db.mapper.AudioFileMapper;
-import cn.reghao.dfs.store.db.mapper.FileMetaMapper;
-import cn.reghao.dfs.store.db.mapper.ImageFileMapper;
-import cn.reghao.dfs.store.db.mapper.VideoUrlMapper;
+import cn.reghao.dfs.store.db.mapper.*;
 import cn.reghao.dfs.store.model.po.AudioFile;
 import cn.reghao.dfs.store.model.po.ImageFile;
+import cn.reghao.dfs.store.model.po.ImageUrl;
 import cn.reghao.dfs.store.model.po.VideoUrl;
 import cn.reghao.oss.api.constant.ObjectScope;
 import cn.reghao.oss.api.iface.PermissionService;
@@ -22,14 +20,14 @@ import java.util.stream.Collectors;
 @DubboService
 @Service
 public class PermissionServiceImpl implements PermissionService {
-    private final ImageFileMapper imageFileMapper;
+    private final ImageUrlMapper imageUrlMapper;
     private final AudioFileMapper audioFileMapper;
     private final VideoUrlMapper videoUrlMapper;
     private final FileMetaMapper fileMetaMapper;
 
-    public PermissionServiceImpl(ImageFileMapper imageFileMapper, AudioFileMapper audioFileMapper,
+    public PermissionServiceImpl(ImageUrlMapper imageUrlMapper, AudioFileMapper audioFileMapper,
                                  VideoUrlMapper videoUrlMapper, FileMetaMapper fileMetaMapper) {
-        this.imageFileMapper = imageFileMapper;
+        this.imageUrlMapper = imageUrlMapper;
         this.audioFileMapper = audioFileMapper;
         this.videoUrlMapper = videoUrlMapper;
         this.fileMetaMapper = fileMetaMapper;
@@ -56,6 +54,12 @@ public class PermissionServiceImpl implements PermissionService {
     }
 
     @Override
-    public void setImagePermission(String imageFileId, int scope) {
+    public void setImagesPermission(List<String> imageFileIds, int scope) {
+        List<String> objectIds = imageUrlMapper.findByImageFileIds(imageFileIds).stream()
+                .map(ImageUrl::getObjectId)
+                .collect(Collectors.toList());
+        if (!objectIds.isEmpty()) {
+            fileMetaMapper.updateScopeByObjectIds(scope, objectIds);
+        }
     }
 }

+ 2 - 14
dfs-store/src/main/java/cn/reghao/dfs/store/service/ObjectNameService.java

@@ -44,20 +44,8 @@ public class ObjectNameService {
 
         String objectPrefix = channel.getPrefix();
         String objectName = objectPrefix + UUID.randomUUID().toString().replace("-", "") + suffix;
-        boolean diskFile;
-        int scope;
-        if (channelId == UploadChannel.disk.getCode()) {
-            diskFile = true;
-            scope = ObjectScope.PRIVATE.getCode();
-        } else if (channelId == UploadChannel.avatar.getCode()
-                || channelId == UploadChannel.image.getCode()
-                || channelId == UploadChannel.img.getCode()) {
-            diskFile = false;
-            scope = ObjectScope.PUBLIC.getCode();
-        } else {
-            diskFile = false;
-            scope = ObjectScope.PRIVATE.getCode();
-        }
+        boolean diskFile = channelId == UploadChannel.disk.getCode();
+        int scope = ObjectScope.PRIVATE.getCode();
 
         FileMeta fileMeta = objectRepository.getByObjectName(objectPrefix);
         if (fileMeta == null) {

+ 57 - 31
dfs-store/src/main/java/cn/reghao/dfs/store/task/VideoUrlUpdater.java

@@ -1,9 +1,14 @@
 package cn.reghao.dfs.store.task;
 
+import cn.reghao.dfs.store.db.mapper.ImageFileMapper;
+import cn.reghao.dfs.store.db.mapper.ImageUrlMapper;
 import cn.reghao.dfs.store.db.mapper.VideoUrlMapper;
 import cn.reghao.dfs.store.db.repository.ObjectRepository;
+import cn.reghao.dfs.store.model.po.ImageFile;
 import cn.reghao.dfs.store.model.po.VideoUrl;
+import cn.reghao.dfs.store.model.vo.ImageObject;
 import cn.reghao.jutil.media.FFmpegWrapper;
+import cn.reghao.jutil.media.ImageOps;
 import cn.reghao.jutil.media.model.AudioProps;
 import cn.reghao.jutil.media.model.MediaProps;
 import cn.reghao.jutil.media.model.VideoProps;
@@ -13,63 +18,84 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
+import java.io.File;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * @author reghao
  * @date 2023-08-29 18:03:39
  */
 @Slf4j
-//@Service
+@Service
 @Deprecated
 public class VideoUrlUpdater {
-    //@Autowired
-    VideoUrlMapper videoUrlMapper;
-    //@Autowired
+    @Autowired
+    ImageFileMapper imageFileMapper;
+    @Autowired
+    ImageUrlMapper imageUrlMapper;
+    @Autowired
     ObjectRepository objectRepository;
 
     //@PostConstruct
     public void update() {
         log.info("开始更新 VideoUrl...");
 
-        List<VideoUrl> list = videoUrlMapper.findAll();
-        for (VideoUrl videoUrl : list) {
-            String objectId = videoUrl.getObjectId();
-            ObjectMeta objectMeta = objectRepository.getObjectMetaById(objectId);
-            String objectName = objectMeta.getObjectName();
-            String absolutePath = objectMeta.getAbsolutePath();
+        List<ImageObject> list = imageFileMapper.findAll1();
+        Set<String> ids = list.stream().map(ImageObject::getImageFileId).collect(Collectors.toSet());
 
-            MediaProps mediaProps = FFmpegWrapper.getMediaProps(absolutePath);
-            if (mediaProps == null) {
-                log.info("{} 的 FFmpeg 媒体信息为 null", objectName);
-                continue;
+        List<ImageObject> list1 = imageUrlMapper.findAll1();
+        //Set<String> ids = list1.stream().map(ImageObject::getImageFileId).collect(Collectors.toSet());
+
+        List<ImageObject> notExist = new ArrayList<>();
+        list1.forEach(imageObject -> {
+            if (!ids.contains(imageObject.getImageFileId())) {
+                notExist.add(imageObject);
             }
+        });
 
-            VideoProps videoProps = mediaProps.getVideoProps();
-            if (videoProps == null) {
-                log.info("{} 的 FFmpeg 视频信息为 null", objectName);
+        List<ImageFile> imageFiles = new ArrayList<>();
+        /*for (ImageObject imageObject : notExist) {
+            String imageFileId = imageObject.getImageFileId();
+            String objectId = imageObject.getObjectId();
+            ObjectMeta objectMeta = objectRepository.getObjectMetaById(objectId);
+            if (objectMeta == null) {
+                log.error("object {} not exist", objectId);
                 continue;
             }
 
-            String videoCodec = mediaProps.getVideoProps().getCodecName();
-            String audioCodec = null;
-            AudioProps audioProps1 = mediaProps.getAudioProps();
-            if (audioProps1 != null) {
-                audioCodec = audioProps1.getCodecName();
+            String absolutePath = objectMeta.getAbsolutePath();
+            File file = new File(absolutePath);
+            if (!file.exists()) {
+                log.error("file {} not exist", absolutePath);
+                continue;
             }
 
-            String qualityStr = videoUrl.getQualityStr();
-            String qualityStr1 = qualityStr.replace("p", "");
-            int quality = Integer.parseInt(qualityStr1);
-
-            videoUrl.setVideoCodec(videoCodec);
-            videoUrl.setAudioCodec(audioCodec);
-            videoUrl.setQuality(quality);
-            videoUrlMapper.update(videoUrl);
+            try {
+                ImageOps.Size size = ImageOps.info(file);
+                int width = size.getWidth();
+                int height = size.getHeight();
+                ImageFile imageFile = new ImageFile(imageFileId, width, height);
+                imageFiles.add(imageFile);
 
-            log.info("{} 的 VideoUrl 已更新", objectName);
+                if (imageFiles.size() > 10_000) {
+                    imageFileMapper.saveAll(imageFiles);
+                    log.info("持久化 {} 个 ImageFile", imageFiles.size());
+                    imageFiles.clear();
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
         }
 
+        if (imageFiles.size() > 0) {
+            imageFileMapper.saveAll(imageFiles);
+            log.info("持久化 {} 个 ImageFile", imageFiles.size());
+            imageFiles.clear();
+        }*/
+
         log.info("VideoUrl 更新完成...");
     }
 }

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

@@ -27,6 +27,13 @@
         delete from image_file
         where image_file_id=#{imageFileId}
     </delete>
+    <delete id="deleteByImageFileIds">
+        delete from image_file
+        where image_file_id in
+        <foreach collection="list" item="id" index="index" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </delete>
 
     <select id="findAll" resultType="cn.reghao.dfs.store.model.po.ImageFile">
         select * from image_file
@@ -35,4 +42,8 @@
         select * from image_file
         where image_file_id=#{imageFileId}
     </select>
+    <select id="findAll1" resultType="cn.reghao.dfs.store.model.vo.ImageObject">
+        select image_file_id
+        from image_file
+    </select>
 </mapper>

+ 12 - 0
dfs-store/src/main/resources/mapper/ImageUrlMapper.xml

@@ -22,10 +22,22 @@
         where image_file_id=#{imageFileId}
     </delete>
 
+    <select id="findByImageFileIds" resultType="cn.reghao.dfs.store.model.po.ImageUrl">
+        select *
+        from image_url
+        where image_file_id in
+        <foreach collection="list" item="item" separator="," open="(" close=")">
+            #{item}
+        </foreach>
+    </select>
     <select id="findByImageFileId" resultType="cn.reghao.dfs.store.model.po.ImageUrl">
         select *
         from image_url
         where image_file_id=#{imageFileId}
         order by format asc
     </select>
+    <select id="findAll1" resultType="cn.reghao.dfs.store.model.vo.ImageObject">
+        select image_file_id,object_id
+        from image_url
+    </select>
 </mapper>

+ 67 - 0
dfs-store/src/test/java/MediaFileTest.java

@@ -1,6 +1,11 @@
 import cn.reghao.dfs.store.DfsStoreApplication;
 import cn.reghao.dfs.store.db.mapper.*;
+import cn.reghao.dfs.store.db.repository.ObjectRepository;
 import cn.reghao.dfs.store.model.po.*;
+import cn.reghao.dfs.store.model.vo.ImageObject;
+import cn.reghao.jutil.media.ImageOps;
+import cn.reghao.oss.api.dto.ObjectMeta;
+import cn.reghao.oss.api.rest.UploadFileRet;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -9,7 +14,11 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.io.File;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * @author reghao
@@ -27,7 +36,65 @@ public class MediaFileTest {
     @Autowired
     FileMetaMapper fileMetaMapper;
 
+    @Autowired
+    ImageFileMapper imageFileMapper;
+    @Autowired
+    ImageUrlMapper imageUrlMapper;
+    @Autowired
+    ObjectRepository objectRepository;
     @Test
     public void videoUrlTest() {
+        List<ImageObject> list = imageFileMapper.findAll1();
+        Set<String> ids = list.stream().map(ImageObject::getImageFileId).collect(Collectors.toSet());
+
+        List<ImageObject> list1 = imageUrlMapper.findAll1();
+        //Set<String> ids = list1.stream().map(ImageObject::getImageFileId).collect(Collectors.toSet());
+
+        List<ImageObject> notExist = new ArrayList<>();
+        list1.forEach(imageObject -> {
+            if (!ids.contains(imageObject.getImageFileId())) {
+                notExist.add(imageObject);
+            }
+        });
+
+        List<ImageFile> imageFiles = new ArrayList<>();
+        /*for (ImageObject imageObject : notExist) {
+            String imageFileId = imageObject.getImageFileId();
+            String objectId = imageObject.getObjectId();
+            ObjectMeta objectMeta = objectRepository.getObjectMetaById(objectId);
+            if (objectMeta == null) {
+                log.error("object {} not exist", objectId);
+                continue;
+            }
+
+            String absolutePath = objectMeta.getAbsolutePath();
+            File file = new File(absolutePath);
+            if (!file.exists()) {
+                log.error("file {} not exist", absolutePath);
+                continue;
+            }
+
+            try {
+                ImageOps.Size size = ImageOps.info(file);
+                int width = size.getWidth();
+                int height = size.getHeight();
+                ImageFile imageFile = new ImageFile(imageFileId, width, height);
+                imageFiles.add(imageFile);
+
+                if (imageFiles.size() > 10_000) {
+                    imageFileMapper.saveAll(imageFiles);
+                    log.info("持久化 {} 个 ImageFile", imageFiles.size());
+                    imageFiles.clear();
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        if (imageFiles.size() > 0) {
+            imageFileMapper.saveAll(imageFiles);
+            log.info("持久化 {} 个 ImageFile", imageFiles.size());
+            imageFiles.clear();
+        }*/
     }
 }

+ 3 - 1
oss-api/src/main/java/cn/reghao/oss/api/iface/PermissionService.java

@@ -1,5 +1,7 @@
 package cn.reghao.oss.api.iface;
 
+import java.util.List;
+
 /**
  * @author reghao
  * @date 2023-06-02 10:06:21
@@ -8,5 +10,5 @@ public interface PermissionService {
     void setDirPermission(String prefix, int scope);
     void getDirPermission(String prefix);
     void setVideoPermission(String videoFileId, int scope);
-    void setImagePermission(String imageFileId, int scope);
+    void setImagesPermission(List<String> imageFileIds, int scope);
 }