reghao пре 3 година
родитељ
комит
3b84627070

+ 13 - 0
src/main/java/cn/reghao/dfs/store/controller/MediaUploadController.java

@@ -72,6 +72,19 @@ public class MediaUploadController {
         return WebBody.success(imageFileRet);
     }
 
+    @ApiOperation(value = "上传小视频文件(20 MiB 以内)")
+    @PostMapping(value = "/vid", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String uploadVidFile(@NotNull MultipartFile file) throws Exception {
+        String contentType = file.getContentType();
+        if (contentType == null || !contentType.startsWith("video")) {
+            return WebBody.failWithMsg("content-type 错误");
+        }
+
+        String uploadId = "";
+        VideoFile videoFile = new VideoFile();
+        return WebBody.success(new VideoFileRet(uploadId, videoFile));
+    }
+
     @ApiOperation("文件上传前的准备, 客户端传递文件的 sha256sum, 文件若存在则直接返回文件关联的 id")
     @PostMapping(value = "/video/prepare", produces = MediaType.APPLICATION_JSON_VALUE)
     public String videoFilePrepare(@Validated UploadPrepare uploadPrepare) {

+ 0 - 4
src/main/java/cn/reghao/dfs/store/db/mapper/FileInfoMapper.java

@@ -14,11 +14,7 @@ import java.util.List;
  */
 @Mapper
 public interface FileInfoMapper extends BaseMapper<FileInfo> {
-    void updateSetUploaded1(String fileId);
     void updateSetUploaded(@Param("fileId") String fileId, @Param("fileType") int fileType, @Param("contentType") String contentType);
 
-    FileDto findBySha256sum(String sha256sum);
     FileInfo findFileInfoBySha256sum(String sha256sum);
-    FileInfo findByFileId(String fileId);
-    List<FileInfo> findAllByUploaded();
 }

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

@@ -22,4 +22,7 @@ public interface FileUrlMapper extends BaseMapper<FileUrl> {
     FileUrlDto findByUploadId(String uploadId);
     List<FileUrl> findByFileId(String fileId);
     FileUrl findFileUrl(@Param("fileId") String fileId, @Param("group") int group, @Param("node") int node);
+
+    List<FileUrl> findAllVideoUrl();
+    List<FileUrl> findAllImageUrl();
 }

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

@@ -15,6 +15,5 @@ public interface ImageFileMapper extends BaseMapper<ImageFile> {
     @Deprecated
     void updateSetUrl(ImageFile imageFile);
 
-    ImageFile findByFileId(String fileId);
-    List<ImageFile> findByFileIds(List<String> list);
+    ImageFile findByImageFileId(String imageFileId);
 }

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

@@ -13,7 +13,7 @@ import java.util.List;
  */
 @Mapper
 public interface ImageUrlMapper extends BaseMapper<ImageUrl> {
-    void updateSetUrl(@Param("fileId") String fileId, @Param("url") String url);
+    void updateSetUrl(@Param("fileId") String fileId, @Param("url") String url, @Param("imageFileId") String imageFileId);
 
 
     @Deprecated
@@ -22,4 +22,7 @@ public interface ImageUrlMapper extends BaseMapper<ImageUrl> {
     void updateImageUrl(@Param("originUrl") String originUrl,
                         @Param("imageFileId") String imageFileId,
                         @Param("url") String url);
+
+    ImageUrl findByFileId(String fileId);
+    ImageUrl findByUrl(String url);
 }

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

@@ -14,4 +14,6 @@ public interface VideoFileMapper extends BaseMapper<VideoFile> {
     void updateSetCover(@Param("videoFileId") String videoFileId,
                         @Param("coverUrl") String coverUrl,
                         @Param("coverUrlOriginal") String coverUrlOriginal);
+
+    VideoFile findByVideoFileId(String videoFileId);
 }

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

@@ -17,4 +17,5 @@ public interface VideoUrlMapper extends BaseMapper<VideoUrl> {
     void updateSetUrl(@Param("fileId") String fileId, @Param("url") String url);
 
     List<VideoUrlDto> findByVideoFileId(String videoFileId);
+    VideoUrl findByFileId(String fileId);
 }

+ 0 - 2
src/main/java/cn/reghao/dfs/store/model/po/FileInfo.java

@@ -2,7 +2,6 @@ package cn.reghao.dfs.store.model.po;
 
 import cn.reghao.dfs.store.model.dto.FileContentType;
 import cn.reghao.jutil.jdk.db.BaseObject;
-import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
@@ -11,7 +10,6 @@ import lombok.Setter;
  * @author reghao
  * @date 2021-11-22 09:57:23
  */
-@AllArgsConstructor
 @NoArgsConstructor
 @Setter
 @Getter

+ 2 - 0
src/main/java/cn/reghao/dfs/store/model/po/VideoUrl.java

@@ -2,11 +2,13 @@ package cn.reghao.dfs.store.model.po;
 
 import cn.reghao.jutil.jdk.db.BaseObject;
 import lombok.Getter;
+import lombok.NoArgsConstructor;
 
 /**
  * @author reghao
  * @date 2022-08-04 09:19:16
  */
+@NoArgsConstructor
 @Getter
 public class VideoUrl extends BaseObject<Integer> {
     private String videoFileId;

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

@@ -1,11 +1,16 @@
 package cn.reghao.dfs.store.rpc;
 
+import cn.reghao.dfs.api.dto.EncryptParams;
 import cn.reghao.dfs.api.iface.MediaUrlService;
 import cn.reghao.dfs.store.db.mapper.VideoUrlMapper;
 import cn.reghao.dfs.api.dto.VideoUrlDto;
+import cn.reghao.jutil.jdk.security.DigestUtil;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.stereotype.Service;
 
+import java.nio.charset.StandardCharsets;
+import java.security.NoSuchAlgorithmException;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -26,4 +31,22 @@ public class MediaUrlServiceImpl implements MediaUrlService {
         List<VideoUrlDto> urls = videoUrlMapper.findByVideoFileId(videoFileId);
         return urls;
     }
+
+    @Override
+    public List<VideoUrlDto> getEncryptMp4Urls(String key) throws NoSuchAlgorithmException {
+        long timestamp = System.currentTimeMillis() + 8*3600*1000;
+        byte[] bytes = (key + timestamp).getBytes(StandardCharsets.UTF_8);
+        String sign = DigestUtil.md5sum(bytes);
+        EncryptParams encryptParams = new EncryptParams(timestamp, sign);
+        return Collections.emptyList();
+    }
+
+    private String encryptUrl(String url) throws NoSuchAlgorithmException {
+        String key = "abcdABCD1234";
+        // 链接过期时间戳,8 小时后过期
+        long t = System.currentTimeMillis() + 8*3600*1000;
+        byte[] bytes = (key + t).getBytes(StandardCharsets.UTF_8);
+        String sign = DigestUtil.md5sum(bytes);
+        return String.format("%s?t=%s&sign=%s", url, t, sign);
+    }
 }

+ 3 - 21
src/main/resources/mapper/FileInfoMapper.xml

@@ -9,34 +9,16 @@
         (#{id},#{deleted},#{createTime},#{updateTime},#{fileId},#{sha256sum},#{filename},#{suffix},#{size},#{fileType},#{contentType},#{uploaded},#{original})
     </insert>
 
-    <update id="updateSetUploaded1">
-        update file_info set update_time=now(),uploaded=1
-        where file_id=#{fileId}
-    </update>
     <update id="updateSetUploaded">
         update file_info set update_time=now(),file_type=#{fileType},content_type=#{contentType},uploaded=1
         where file_id=#{fileId}
     </update>
 
-    <select id="findBySha256sum" resultType="cn.reghao.dfs.store.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 * from file_info where sha256sum=#{sha256sum}
-    </select>
-    <select id="findByFileId" resultType="cn.reghao.dfs.store.model.po.FileInfo">
-        select * from file_info where file_id=#{fileId}
-    </select>
-    <select id="findAllByPage" resultType="cn.reghao.dfs.store.model.po.FileInfo">
-        select * from file_info
-    </select>
     <select id="findAll" resultType="cn.reghao.dfs.store.model.po.FileInfo">
         select * from file_info
+        where file_type=3
     </select>
-    <select id="findAllByUploaded" resultType="cn.reghao.dfs.store.model.po.FileInfo">
-        select * from file_info where uploaded is true
+    <select id="findFileInfoBySha256sum" resultType="cn.reghao.dfs.store.model.po.FileInfo">
+        select * from file_info where sha256sum=#{sha256sum}
     </select>
 </mapper>

+ 7 - 1
src/main/resources/mapper/FileUrlMapper.xml

@@ -14,9 +14,15 @@
         where file_id=#{fileId}
     </update>
 
-    <select id="findAll" resultType="cn.reghao.dfs.store.model.po.FileUrl">
+    <select id="findAllVideoUrl" resultType="cn.reghao.dfs.store.model.po.FileUrl">
         select * from file_url
+        where `group`=0 and node=0 and path like '%video/playback%';
     </select>
+    <select id="findAllImageUrl" resultType="cn.reghao.dfs.store.model.po.FileUrl">
+        select * from file_url
+        where `group`=0 and node=0 and path like '%image%';
+    </select>
+
     <select id="findByUploadId" resultType="cn.reghao.dfs.store.model.dto.FileUrlDto">
         select info.id,info.filename,url.path,url.url,url.absolute_path as absolutePath from file_url url
         inner join file_user fileUser

+ 4 - 0
src/main/resources/mapper/ImageFileMapper.xml

@@ -16,4 +16,8 @@
             (#{item.id},#{item.deleted},#{item.createTime},#{item.updateTime},#{item.imageFileId},#{item.horizontal})
         </foreach>
     </insert>
+
+    <select id="findByImageFileId" resultType="cn.reghao.dfs.store.model.po.ImageFile">
+        select * from image_file where image_file_id=#{imageFileId}
+    </select>
 </mapper>

+ 7 - 11
src/main/resources/mapper/ImageUrlMapper.xml

@@ -18,19 +18,15 @@
     </insert>
 
     <update id="updateSetUrl">
-        update mblog_image set origin_url=#{url} where image_file_id=#{fileId}
+        update image_url
+        set url=#{url},image_file_id=#{imageFileId}
+        where file_id=#{fileId}
     </update>
 
-    <select id="findAll" resultType="cn.reghao.dfs.store.model.po.ImageUrl">
-        select * from image_url
+    <select id="findByFileId" resultType="cn.reghao.dfs.store.model.po.ImageUrl">
+        select * from image_url where file_id=#{fileId}
     </select>
-
-    <select id="getImageUrls" resultType="java.lang.String">
-        select image_url from mblog_image
-        where image_url not like '%reghao.cn%'
+    <select id="findByUrl" resultType="cn.reghao.dfs.store.model.po.ImageUrl">
+        select * from image_url where url=#{url}
     </select>
-    <update id="updateImageUrl">
-        update mblog_image set image_file_id=#{imageFileId},image_url=#{url}
-        where origin_url=#{originUrl}
-    </update>
 </mapper>

+ 7 - 0
src/main/resources/mapper/VideoFileMapper.xml

@@ -13,4 +13,11 @@
         update video_file set update_time=now(),cover_url=#{coverUrl},cover_url_original=#{coverUrlOriginal}
         where file_id=#{fileId}
     </update>
+
+    <select id="findAll" resultType="cn.reghao.dfs.store.model.po.VideoFile">
+        select * from video_file
+    </select>
+    <select id="findByVideoFileId" resultType="cn.reghao.dfs.store.model.po.VideoFile">
+        select * from video_file where video_file_id=#{videoFileId}
+    </select>
 </mapper>

+ 2 - 2
src/main/resources/mapper/VideoUrlMapper.xml

@@ -13,8 +13,8 @@
         update video_url set url=#{url} where file_id=#{fileId}
     </update>
 
-    <select id="findAll" resultType="cn.reghao.dfs.store.model.po.VideoUrl">
-        select * from video_url
+    <select id="findByFileId" resultType="cn.reghao.dfs.store.model.po.VideoUrl">
+        select * from video_url where file_id=#{fileId}
     </select>
     <select id="findByVideoFileId" resultType="cn.reghao.dfs.api.dto.VideoUrlDto">
         select fileUrl.url,fileUrl.path,videoUrl.url_type as type,videoUrl.width,videoUrl.height,videoUrl.quality

+ 99 - 35
src/test/java/ConsistentCheckTest.java

@@ -1,8 +1,7 @@
 import cn.reghao.dfs.store.db.mapper.*;
 import cn.reghao.dfs.store.model.constant.VideoUrlType;
 import cn.reghao.dfs.store.model.dto.UploadingFile;
-import cn.reghao.dfs.store.model.po.ImageUrl;
-import cn.reghao.dfs.store.model.po.VideoUrl;
+import cn.reghao.dfs.store.model.po.*;
 import cn.reghao.dfs.store.model.vo.ImageFileRet;
 import cn.reghao.dfs.store.model.dto.UploadedFile;
 import cn.reghao.dfs.store.service.FileUploadService;
@@ -10,7 +9,7 @@ import cn.reghao.dfs.store.service.media.ImageFileService;
 import cn.reghao.dfs.store.service.media.MediaQuality;
 import cn.reghao.jutil.jdk.http.util.UrlFormatter;
 import cn.reghao.dfs.store.DfsStoreApplication;
-import cn.reghao.dfs.store.model.po.FileUrl;
+import cn.reghao.jutil.tool.id.IdGenerator;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.FileUtils;
 import org.junit.Test;
@@ -42,10 +41,6 @@ public class ConsistentCheckTest {
     FileUploadService fileUploadService;
     @Autowired
     ImageFileService imageFileService;
-    @Autowired
-    VideoUrlMapper videoUrlMapper;
-    @Autowired
-    ImageUrlMapper imageUrlMapper;
 
     HttpClient client = HttpClient.newBuilder()
             .version(HttpClient.Version.HTTP_1_1)
@@ -143,44 +138,113 @@ public class ConsistentCheckTest {
         videoUrlMapper.save(videoUrl);
     }
 
+    @Autowired
+    FileInfoMapper fileInfoMapper;
     @Autowired
     FileUrlMapper fileUrlMapper;
+    @Autowired
+    VideoFileMapper videoFileMapper;
+    @Autowired
+    VideoUrlMapper videoUrlMapper;
+
+    /**
+     * 检查 FileInfo 和 FileUrl 的一致性
+     * FileInfo 和 FileUrl 是 one-to-many 关系
+     *
+     * @param
+     * @return
+     * @date 2022-08-14 下午2:30
+     */
     @Test
-    public void imgTest() {
-        List<ImageUrl> list = imageUrlMapper.findAll();
-        list.forEach(imageUrl -> {
-            String fileId = imageUrl.getFileId();
-            FileUrl fileUrl = fileUrlMapper.findFileUrl(fileId, 0, 0);
-            String url = fileUrl.getUrl();
-
-            imageUrlMapper.updateSetUrl(fileId, url);
-        });
+    public void fileTest() {
+        int i = 0;
+        List<FileInfo> list = fileInfoMapper.findAll();
+        for (FileInfo fileInfo : list) {
+            String fileId = fileInfo.getFileId();
+            List<FileUrl> fileUrls = fileUrlMapper.findByFileId(fileId);
+            if (fileUrls.size() == 0) {
+                log.error("{} 没有 FileUrl", fileId);
+            } else if (fileUrls.size() > 1) {
+                log.error("{} 有 {} 个 FileUrl", fileId, fileUrls.size());
+            }
+
+            log.info("{}", i++);
+        }
     }
 
     @Test
-    public void vidTest() {
-        List<VideoUrl> list = videoUrlMapper.findAll();
-        list.forEach(videoUrl -> {
-            String fileId = videoUrl.getFileId();
-            FileUrl fileUrl = fileUrlMapper.findFileUrl(fileId, 0, 0);
-            String url = fileUrl.getUrl();
-
-            videoUrlMapper.updateSetUrl(fileId, url);
-        });
+    public void videoFileTest() {
+        int i = 0;
+        List<FileUrl> list = fileUrlMapper.findAllVideoUrl();
+        for (FileUrl fileUrl : list) {
+            String fileId = fileUrl.getFileId();
+
+            VideoUrl videoUrl = videoUrlMapper.findByFileId(fileId);
+            if (videoUrl != null) {
+                String videoFileId = videoUrl.getVideoFileId();
+                videoUrlMapper.updateSetUrl(fileId, fileUrl.getUrl());
+
+                VideoFile videoFile = videoFileMapper.findByVideoFileId(videoFileId);
+                if (videoFile == null) {
+                    log.error("{} 没有 VideoFile", fileId);
+                }
+            } else {
+                log.error("{} 没有 VideoUrl", fileId);
+            }
+
+            log.info("{}", i++);
+        }
     }
 
+    IdGenerator idGenerator = new IdGenerator("image-file-id");
+    @Autowired
+    ImageFileMapper imageFileMapper;
+    @Autowired
+    ImageUrlMapper imageUrlMapper;
     @Test
-    public void uploadSmallImageTest() throws Exception {
-        String filePath = "/home/reghao/Downloads/pic/banner/bg.jpg";
-        File file = new File(filePath);
+    public void imageFileTest() {
+        int i = 0;
+        List<FileUrl> list = fileUrlMapper.findAllImageUrl();
+        for (FileUrl fileUrl : list) {
+            String fileId = fileUrl.getFileId();
+
+            ImageUrl imageUrl = imageUrlMapper.findByFileId(fileId);
+            if (imageUrl != null) {
+                if (imageUrl.getImageFileId() != null) {
+                    continue;
+                }
 
-        String filename = file.getName();
-        long size = file.length();
-        String contentType = "image/jpeg";
-        InputStream inputStream = new FileInputStream(file);
+                String imageFileId = idGenerator.getUuid();
+                boolean horizontal = imageUrl.getWidth() > imageUrl.getHeight();
+                ImageFile imageFile = new ImageFile(imageFileId, horizontal);
+                imageFileMapper.save(imageFile);
+                imageUrlMapper.updateSetUrl(fileId, fileUrl.getUrl(), imageFileId);
+                    /*ImageFile imageFile = imageFileMapper.findByImageFileId(imageFileId);
+                    if (imageFile == null) {
+                        log.info("{} 没有 ImageFile", fileId);
+                    }*/
+            } else {
+                log.error("{} 没有 ImageUrl", fileId);
+            }
+            log.info("{}", i++);
+        }
+    }
 
-        UploadingFile uploadingFile = new UploadingFile(filename, size, contentType, inputStream);
-        UploadedFile uploadedFile = fileUploadService.put(uploadingFile);
-        System.out.println(uploadedFile.getPathUrl().getUrl());
+    @Test
+    public void videoFileTest1() {
+        int i = 0;
+
+        List<VideoFile> videoFiles = videoFileMapper.findAll();
+        for (VideoFile videoFile : videoFiles) {
+            String coverUrl = videoFile.getCoverUrl();
+            ImageUrl imageUrl = imageUrlMapper.findByUrl(coverUrl);
+            if (imageUrl != null) {
+                String imageFileId = imageUrl.getImageFileId();
+            } else {
+                log.error("{} 没有 ImageUrl", videoFile.getVideoFileId());
+            }
+
+            //log.info("{}", i++);
+        }
     }
 }