Selaa lähdekoodia

更新对上传的视频文件的处理(包括重复的视频文件)

reghao 2 vuotta sitten
vanhempi
commit
5e0721bb9e

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

@@ -5,6 +5,7 @@ import cn.reghao.dfs.store.db.repository.ObjectRepository;
 import cn.reghao.dfs.store.model.po.FileMeta;
 import cn.reghao.dfs.store.model.vo.ObjectProp;
 import cn.reghao.oss.api.constant.ObjectACL;
+import cn.reghao.oss.api.constant.ObjectType;
 import cn.reghao.oss.api.constant.UploadChannel;
 import org.springframework.stereotype.Service;
 
@@ -31,11 +32,13 @@ public class ObjectNameService {
     }
 
     public ObjectProp getObjectProp(int channelId) throws Exception {
-        String objectPrefix = UploadChannel.getPrefix(channelId);
-        if (objectPrefix == null) {
+        UploadChannel channel = UploadChannel.getUploadChannel(channelId);
+        if (channel == null) {
             throw new Exception("channelId 不合法");
         }
 
+        String objectPrefix = channel.getPrefix();
+        String objectSuffix = channel.getSuffix();
         String objectName = objectPrefix + UUID.randomUUID().toString().replace("-", "");
         boolean diskFile;
         int acl;
@@ -57,6 +60,19 @@ public class ObjectNameService {
         return new ObjectProp(objectName, diskFile, acl, objectPrefix, pid);
     }
 
+    public String getObjectNameFromOriginal(String originalObjectName) {
+        int idx = originalObjectName.lastIndexOf("/");
+        String prefix = originalObjectName.substring(0, idx+1);
+        UploadChannel channel = UploadChannel.getUploadChannel(prefix);
+        String suffix = channel.getSuffix();
+        String id = UUID.randomUUID().toString().replace("-", "");
+        return prefix + id + suffix;
+    }
+
+    public String getObjectNameFromUrl(String url) {
+        return url.replace("//oss.reghao.cn/", "");
+    }
+
     public void createParentDirs(String objectName, int acl) {
         List<String> list = getSortedParent(objectName);
         for (int i = 0; i < list.size(); i++) {

+ 7 - 7
dfs-store/src/main/java/cn/reghao/dfs/store/service/PutObjectService.java

@@ -100,20 +100,20 @@ public class PutObjectService {
         return new ObjectResult(objectName, objectId, fileType, savedPath, url, dupObjectId);
     }
 
-    public ObjectResult copyObject(String objectName) {
-        FileMeta fileMeta = objectRepository.getByObjectName(objectName);
+    public ObjectResult copyObject(String fromObjectName) {
+        FileMeta fileMeta = objectRepository.getByObjectName(fromObjectName);
         int fileType = fileMeta.getFileType();
 
         String filename = fileMeta.getFilename();
         String savedPath = "";
         boolean diskFile = fileMeta.getDiskFile();
         int acl = fileMeta.getAcl();
-        String objectId = UUID.randomUUID().toString().replace("-", "");
-        FileMeta fileMeta1 = new FileMeta(objectName, objectId, filename, fileMeta, diskFile, acl);
+        String toObjectName = objectNameService.getObjectNameFromOriginal(fromObjectName);
+        String toObjectId = UUID.randomUUID().toString().replace("-", "");
+        FileMeta fileMeta1 = new FileMeta(toObjectName, toObjectId, filename, fileMeta, diskFile, acl);
         objectRepository.saveFileMeta(fileMeta1);
 
-        String url = objectNameService.getObjectUrl(objectName);
-        String dupObjectId = fileMeta.getObjectId();
-        return new ObjectResult(objectName, objectId, fileType, savedPath, url, dupObjectId);
+        String url = objectNameService.getObjectUrl(toObjectName);
+        return new ObjectResult(toObjectName, toObjectId, fileType, savedPath, url);
     }
 }

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

@@ -44,17 +44,17 @@ public class ImageFileProcessor {
             ImageFile imageFile = mediaRepository.findImageFile(dupObjectId);
 
             String originalUrl = imageFile.getOriginalUrl();
-            String originalObjectName = originalUrl.replace("//oss.reghao.cn", "");
+            String originalObjectName = objectNameService.getObjectNameFromUrl(originalUrl);
             ObjectResult objectResult1 = putObjectService.copyObject(originalObjectName);
             String originalUrl1 = objectResult1.getUploadFileRet().getUrl();
 
-            String jpegUrl = imageFile.getWebpUrl();
-            String jpegObjectName = jpegUrl.replace("//oss.reghao.cn", "");
+            String jpegUrl = imageFile.getJpegUrl();
+            String jpegObjectName = objectNameService.getObjectNameFromUrl(jpegUrl);
             ObjectResult objectResult2 = putObjectService.copyObject(jpegObjectName);
             String jpegUrl1 = objectResult2.getUploadFileRet().getUrl();
 
-            String webpUrl = imageFile.getThumbnailUrl();
-            String webpObjectName = webpUrl.replace("//oss.reghao.cn", "");
+            String webpUrl = imageFile.getWebpUrl();
+            String webpObjectName = objectNameService.getObjectNameFromUrl(webpUrl);
             ObjectResult objectResult3 = putObjectService.copyObject(webpObjectName);
             String webpUrl1 = objectResult3.getUploadFileRet().getUrl();
 

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

@@ -63,16 +63,17 @@ public class VideoFileProcessor {
 
             VideoUrl videoUrl = mediaRepository.findVideoUrl(dupObjectId);
             String urlType = videoUrl.getUrlType();
-            String url = objectResult.getUploadFileRet().getUrl();
             String quality = videoUrl.getQuality();
             int width = videoUrl.getWidth();
             int height = videoUrl.getHeight();
 
-            String objectName1 = url.replace("//oss.reghao.cn", "");
+            String url = objectResult.getUploadFileRet().getUrl();
+            String objectName1 = objectNameService.getObjectNameFromUrl(url);
             ObjectResult objectResult1 = putObjectService.copyObject(objectName1);
             String objectId1 = objectResult1.getObjectId();
+            String url1 = objectResult1.getUploadFileRet().getUrl();
 
-            VideoUrl videoUrl1 = new VideoUrl(objectId, objectId1, urlType, url, quality, width, height);
+            VideoUrl videoUrl1 = new VideoUrl(objectId, objectId1, urlType, url1, quality, width, height);
             mediaRepository.saveVideoFile(videoFile1, videoUrl1);
             return;
         }
@@ -91,6 +92,18 @@ public class VideoFileProcessor {
             return;
         }
 
+        String videoCodec = mediaProps.getVideoProps().getCodecName();
+        if (videoCodecs.contains(videoCodec)) {
+            AudioProps audioProps = mediaProps.getAudioProps();
+            if (audioProps != null && !audioCodecs.contains(audioProps.getCodecName())) {
+                log.error("{} 对象的音频非 aac 编码, 暂不处理", objectName);
+                return;
+            }
+        } else {
+            log.error("{} 对象的视频非 h264 编码, 暂不处理", objectName);
+            return;
+        }
+
         String videoFileId = objectId;
         int width = videoProps.getCodedWidth().intValue();
         int height = videoProps.getCodedHeight().intValue();
@@ -98,30 +111,18 @@ public class VideoFileProcessor {
         int duration = videoProps.getDuration().intValue();
         VideoFile videoFile = new VideoFile(videoFileId, horizontal, duration);
 
-        AudioProps audioProps = mediaProps.getAudioProps();
-        if (audioProps == null) {
-            log.info("{} 的 FFmpeg 音频信息为 null", objectName);
-            return;
-        }
+        MediaResolution mediaResolution = MediaQuality.getQuality(width, height);
+        String urlType = FileType.getVideoUrlType(absolutePath);
 
-        String audioCodec = mediaProps.getAudioProps().getCodecName();
-        String videoCodec = mediaProps.getVideoProps().getCodecName();
-        VideoUrl videoUrl = null;
-        if (audioCodecs.contains(audioCodec) && videoCodecs.contains(videoCodec)) {
-            MediaResolution mediaResolution = MediaQuality.getQuality(width, height);
-            String urlType = FileType.getVideoUrlType(absolutePath);
-            String url = objectNameService.getObjectUrl(objectName);
-            videoUrl = new VideoUrl(videoFileId, objectId, urlType, url, mediaResolution);
-        } else {
-            //videoUrl = getConvertedVideoUrl(videoFileId, new File(absolutePath), width, height);
-            log.error("{} 非 h264&aac 编码, 暂不处理", objectName);
-        }
+        String originalObjectName = objectResult.getObjectName();
+        ObjectResult objectResult1 = putObjectService.copyObject(originalObjectName);
+        String objectId1 = objectResult1.getObjectId();
+        String url = objectResult1.getUploadFileRet().getUrl();
 
-        if (videoUrl != null) {
-            mediaRepository.saveVideoFile(videoFile, videoUrl);
-        }
+        VideoUrl videoUrl  = new VideoUrl(videoFileId, objectId1, urlType, url, mediaResolution);;
+        mediaRepository.saveVideoFile(videoFile, videoUrl);
 
-        log.info("添加视频格式转码任务");
+        //log.info("添加视频格式转码任务");
         //threadPool.submit(new ConvertTask());
     }
 

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

@@ -20,4 +20,8 @@
         from video_file
         where video_file_id=#{videoFileId}
     </select>
+    <select id="findByVideoFileId" resultType="cn.reghao.dfs.store.model.po.VideoFile">
+        select * from video_file
+        where video_file_id=#{videoFileId}
+    </select>
 </mapper>

+ 22 - 10
oss-api/src/main/java/cn/reghao/oss/api/constant/UploadChannel.java

@@ -9,36 +9,44 @@ import java.util.Map;
  */
 public enum UploadChannel {
     // 网盘上传
-    disk(1, "file/"),
+    disk(1, "file/", ""),
     // 视频上传
-    video(2, "video/playback/"),
+    video(2, "video/playback/", ".mp4"),
     // 视频封面上传
-    cover(3, "image/cover/"),
+    cover(3, "image/cover/", ".jpeg"),
     // 用户头像上传
-    avatar(4, "image/avatar/"),
+    avatar(4, "image/avatar/", ".jpeg"),
     // 用户状态照片上传
-    photo(5, "image/photo/"),
+    photo(5, "image/photo/", ".jpeg"),
     // 音频上传
-    audio(6, "audio/playback/");
+    audio(6, "audio/playback/", ".m4a");
 
     private final int code;
     private final String prefix;
-    UploadChannel(int code, String prefix) {
+    private final String suffix;
+    UploadChannel(int code, String prefix, String suffix) {
         this.code = code;
         this.prefix = prefix;
+        this.suffix = suffix;
     }
 
-    private static Map<Integer, String> map = new HashMap<>();
+    private static Map<Integer, UploadChannel> map = new HashMap<>();
+    private static Map<String, UploadChannel> map1 = new HashMap<>();
     static {
         for (UploadChannel channel : UploadChannel.values()) {
-            map.put(channel.code, channel.prefix);
+            map.put(channel.code, channel);
+            map1.put(channel.prefix, channel);
         }
     }
 
-    public static String getPrefix(int code) {
+    public static UploadChannel getUploadChannel(int code) {
         return map.get(code);
     }
 
+    public static UploadChannel getUploadChannel(String prefix) {
+        return map1.get(prefix);
+    }
+
     public int getCode() {
         return code;
     }
@@ -46,4 +54,8 @@ public enum UploadChannel {
     public String getPrefix() {
         return prefix;
     }
+
+    public String getSuffix() {
+        return suffix;
+    }
 }