Bladeren bron

更新 dfs-store 中对上传对象的处理

reghao 2 jaren geleden
bovenliggende
commit
77a3649eb4

+ 16 - 4
dfs-store/src/main/java/cn/reghao/dfs/store/controller/ObjectUploadController.java

@@ -9,6 +9,7 @@ import cn.reghao.dfs.store.task.FileProcessor;
 import cn.reghao.jutil.jdk.result.WebResult;
 import cn.reghao.jutil.jdk.security.DigestUtil;
 import cn.reghao.jutil.web.ServletUtil;
+import cn.reghao.oss.api.rest.UploadFileRet;
 import org.apache.commons.io.FileUtils;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
@@ -61,10 +62,16 @@ public class ObjectUploadController {
             ObjectProp objectProp = objectNameService.getObjectProp(channelId);
             String originalFilename = file.getName();
             ObjectResult objectResult = putObjectService.putObject(objectProp, contentId, savedFile, originalFilename, sha256sum);
-            fileProcessor.process(objectResult);
+
+            UploadFileRet uploadFileRet = fileProcessor.process(objectResult);
+            if (uploadFileRet == null) {
+                String url = objectNameService.getObjectUrl(objectResult.getObjectName());
+                uploadFileRet = new UploadFileRet(objectResult.getObjectId(), url);
+            }
+
             // TODO PutMessageConverter 中生成的文件需要显式删除
             FileUtils.deleteQuietly(file);
-            return WebResult.success(objectResult.getUploadFileRet());
+            return WebResult.success(uploadFileRet);
         } catch (Exception e) {
             FileUtils.deleteQuietly(file);
             String errMsg = e.getMessage();
@@ -85,7 +92,12 @@ public class ObjectUploadController {
         ObjectProp objectProp = objectNameService.getObjectProp(channelId);
         String originalFilename = file.getOriginalFilename();
         ObjectResult objectResult = putObjectService.putObject(objectProp, contentId, savedFile, originalFilename, sha256sum);
-        fileProcessor.process(objectResult);
-        return WebResult.success(objectResult.getUploadFileRet());
+
+        UploadFileRet uploadFileRet = fileProcessor.process(objectResult);
+        if (uploadFileRet == null) {
+            String url = objectNameService.getObjectUrl(objectResult.getObjectName());
+            uploadFileRet = new UploadFileRet(objectResult.getObjectId(), url);
+        }
+        return WebResult.success(uploadFileRet);
     }
 }

+ 0 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/ObjectProp.java

@@ -13,6 +13,5 @@ public class ObjectProp {
     private String objectName;
     private boolean diskFile;
     private int acl;
-    private String objectPrefix;
     private String pid;
 }

+ 2 - 8
dfs-store/src/main/java/cn/reghao/dfs/store/model/vo/ObjectResult.java

@@ -1,11 +1,8 @@
 package cn.reghao.dfs.store.model.vo;
 
-import cn.reghao.oss.api.rest.UploadFileRet;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.io.Serializable;
-
 /**
  * @author reghao
  * @date 2023-06-11 01:29:47
@@ -17,25 +14,22 @@ public class ObjectResult {
     private String objectId;
     private int fileType;
     private String absolutePath;
-    private UploadFileRet uploadFileRet;
     private boolean duplicate;
     private String dupObjectId;
 
-    public ObjectResult(String objectName, String objectId, int fileType, String absolutePath, String url) {
+    public ObjectResult(String objectName, String objectId, int fileType, String absolutePath) {
         this.objectName = objectName;
         this.objectId = objectId;
         this.fileType = fileType;
         this.absolutePath = absolutePath;
-        this.uploadFileRet = new UploadFileRet(objectId, url);
         this.duplicate = false;
     }
 
-    public ObjectResult(String objectName, String objectId, int fileType, String absolutePath, String url, String dupObjectId) {
+    public ObjectResult(String objectName, String objectId, int fileType, String absolutePath, String dupObjectId) {
         this.objectName = objectName;
         this.objectId = objectId;
         this.fileType = fileType;
         this.absolutePath = absolutePath;
-        this.uploadFileRet = new UploadFileRet(objectId, url);
         this.duplicate = true;
         this.dupObjectId = dupObjectId;
     }

+ 19 - 9
dfs-store/src/main/java/cn/reghao/dfs/store/service/ObjectNameService.java

@@ -5,7 +5,6 @@ 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,6 +30,10 @@ public class ObjectNameService {
         return String.format("//%s/%s", domain, objectName);
     }
 
+    public String getObjectNameFromUrl(String url) {
+        return url.replace(String.format("//%s/", domain), "");
+    }
+
     public ObjectProp getObjectProp(int channelId) throws Exception {
         UploadChannel channel = UploadChannel.getUploadChannel(channelId);
         if (channel == null) {
@@ -38,7 +41,6 @@ public class ObjectNameService {
         }
 
         String objectPrefix = channel.getPrefix();
-        String objectSuffix = channel.getSuffix();
         String objectName = objectPrefix + UUID.randomUUID().toString().replace("-", "");
         boolean diskFile;
         int acl;
@@ -57,20 +59,28 @@ public class ObjectNameService {
         }
 
         String pid = fileMeta.getObjectId();
-        return new ObjectProp(objectName, diskFile, acl, objectPrefix, pid);
+        return new ObjectProp(objectName, diskFile, acl, pid);
     }
 
-    public String getObjectNameFromOriginal(String originalObjectName) {
+    public ObjectProp getObjectProp(String originalObjectName, String suffix) {
         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;
+        FileMeta fileMeta = objectRepository.getByObjectName(originalObjectName);
+        boolean diskFile = fileMeta.getDiskFile();
+        int acl = fileMeta.getAcl();
+        String pid = fileMeta.getPid();
+
+        String objectPrefix = channel.getPrefix();
+        String objectName = objectPrefix + UUID.randomUUID().toString().replace("-", "") + suffix;
+        return new ObjectProp(objectName, diskFile, acl, pid);
     }
 
-    public String getObjectNameFromUrl(String url) {
-        return url.replace("//oss.reghao.cn/", "");
+    public String getObjectNameFromOriginal(String originalObjectName, String suffix) {
+        int idx = originalObjectName.lastIndexOf("/");
+        String prefix = originalObjectName.substring(0, idx+1);
+        String id = UUID.randomUUID().toString().replace("-", "");
+        return prefix + id + suffix;
     }
 
     public void createParentDirs(String objectName, int acl) {

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

@@ -57,9 +57,7 @@ public class PutObjectService {
             String blockId = UUID.randomUUID().toString();
             List<DataBlock> list = List.of(new DataBlock(contentId, 0, blockId, savedPath));
             objectRepository.saveObject(fileMeta, list);
-
-            String url = objectNameService.getObjectUrl(objectName);
-            return new ObjectResult(objectName, objectId, fileType, savedPath, url);
+            return new ObjectResult(objectName, objectId, fileType, savedPath);
         }
     }
 
@@ -95,12 +93,10 @@ public class PutObjectService {
         int acl = objectProp.getAcl();
         FileMeta fileMeta1 = new FileMeta(objectName, objectId, filename, fileMeta, diskFile, acl);
         objectRepository.saveFileMeta(fileMeta1);
-
-        String url = objectNameService.getObjectUrl(objectName);
-        return new ObjectResult(objectName, objectId, fileType, savedPath, url, dupObjectId);
+        return new ObjectResult(objectName, objectId, fileType, savedPath, dupObjectId);
     }
 
-    public ObjectResult copyObject(String fromObjectName) {
+    public ObjectResult copyObject(String fromObjectName, String suffix) {
         FileMeta fileMeta = objectRepository.getByObjectName(fromObjectName);
         int fileType = fileMeta.getFileType();
 
@@ -108,12 +104,10 @@ public class PutObjectService {
         String savedPath = "";
         boolean diskFile = fileMeta.getDiskFile();
         int acl = fileMeta.getAcl();
-        String toObjectName = objectNameService.getObjectNameFromOriginal(fromObjectName);
+        String toObjectName = objectNameService.getObjectNameFromOriginal(fromObjectName, suffix);
         String toObjectId = UUID.randomUUID().toString().replace("-", "");
         FileMeta fileMeta1 = new FileMeta(toObjectName, toObjectId, filename, fileMeta, diskFile, acl);
         objectRepository.saveFileMeta(fileMeta1);
-
-        String url = objectNameService.getObjectUrl(toObjectName);
-        return new ObjectResult(toObjectName, toObjectId, fileType, savedPath, url);
+        return new ObjectResult(toObjectName, toObjectId, fileType, savedPath);
     }
 }

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

@@ -14,6 +14,7 @@ import cn.reghao.jutil.media.FFmpegWrapper;
 import cn.reghao.jutil.media.model.AudioProps;
 import cn.reghao.jutil.media.model.MediaProps;
 import cn.reghao.oss.api.constant.UploadChannel;
+import cn.reghao.oss.api.rest.UploadFileRet;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
@@ -45,12 +46,12 @@ public class AudioFileProcessor {
         this.fileStoreService = fileStoreService;
     }
 
-    public void process(ObjectResult objectResult) {
+    public UploadFileRet process(ObjectResult objectResult) {
         String objectId = objectResult.getObjectId();
         boolean duplicate = objectResult.isDuplicate();
         if (duplicate) {
             String dupObjectId = objectResult.getDupObjectId();
-            return;
+            return null;
         }
 
         String objectName = objectResult.getObjectName();
@@ -58,23 +59,24 @@ public class AudioFileProcessor {
         MediaProps mediaProps = FFmpegWrapper.getMediaProps(absolutePath);
         if (mediaProps == null) {
             log.info("{} 的 FFmpeg 媒体信息为 null", objectName);
-            return;
+            return null;
         }
 
         AudioProps audioProps = mediaProps.getAudioProps();
         if (audioProps == null) {
             log.info("{} 的 FFmpeg 音频信息为 null", objectName);
-            return;
+            return null;
         }
 
         String audioCodec = audioProps.getCodecName();
         if (!audioCodecs.contains(audioCodec)) {
             log.error("{} 对象的音频非 aac 编码, 暂不处理", objectName);
-            return;
+            return null;
         }
 
         //log.info("添加视频格式转码任务");
         //threadPool.submit(new ConvertTask());
+        return null;
     }
 
     private VideoUrl getConvertedAudioUrl(String audioFileId, File file) {
@@ -98,8 +100,8 @@ public class AudioFileProcessor {
             String originalFilename = "";
             ObjectResult objectResult = putObjectService.putObject(objectProp, contentId, savedFile, originalFilename, sha256sum);
 
-            String objectId = objectResult.getUploadFileRet().getUploadId();
-            String url = objectResult.getUploadFileRet().getUrl();
+            String objectId = objectResult.getObjectId();
+            String url = objectNameService.getObjectUrl(objectResult.getObjectName());
             String urlType = FileType.getVideoUrlType(absolutePath);
             return null;
         } catch (Exception e) {

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

@@ -3,6 +3,7 @@ package cn.reghao.dfs.store.task;
 import cn.reghao.dfs.store.model.vo.ObjectResult;
 import cn.reghao.jutil.jdk.thread.ThreadPoolWrapper;
 import cn.reghao.oss.api.constant.ObjectType;
+import cn.reghao.oss.api.rest.UploadFileRet;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
@@ -18,28 +19,35 @@ public class FileProcessor {
     private final ExecutorService threadPool = ThreadPoolWrapper.threadPool("file-processor", 10);
     private final ImageFileProcessor imageFileProcessor;
     private final VideoFileProcessor videoFileProcessor;
+    private final AudioFileProcessor audioFileProcessor;
 
-    public FileProcessor(ImageFileProcessor imageFileProcessor, VideoFileProcessor videoFileProcessor) {
+    public FileProcessor(ImageFileProcessor imageFileProcessor, VideoFileProcessor videoFileProcessor,
+                         AudioFileProcessor audioFileProcessor) {
         this.imageFileProcessor = imageFileProcessor;
         this.videoFileProcessor = videoFileProcessor;
+        this.audioFileProcessor = audioFileProcessor;
     }
 
-    public void process(ObjectResult objectResult) {
+    public UploadFileRet process(ObjectResult objectResult) {
         String objectName = objectResult.getObjectName();
         int fileType = objectResult.getFileType();
         ObjectType objectType = ObjectType.getByCode(fileType);
+        UploadFileRet uploadFileRet = null;
         switch (objectType) {
             case Image:
-                imageFileProcessor.process(objectResult);
+                uploadFileRet = imageFileProcessor.process(objectResult);
                 break;
             case Video:
-                videoFileProcessor.process(objectResult);
+                uploadFileRet = videoFileProcessor.process(objectResult);
                 break;
             case Audio:
+                uploadFileRet = audioFileProcessor.process(objectResult);
             case Text:
             case Other:
             default:
                 log.info("{} 类型的 {} 文件暂时无法处理", objectType.name(), objectName);
         }
+
+        return uploadFileRet;
     }
 }

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

@@ -9,12 +9,13 @@ import cn.reghao.dfs.store.service.PutObjectService;
 import cn.reghao.jutil.jdk.security.DigestUtil;
 import cn.reghao.dfs.store.model.po.ImageFile;
 import cn.reghao.jutil.media.ImageOps;
-import cn.reghao.oss.api.constant.UploadChannel;
+import cn.reghao.oss.api.rest.UploadFileRet;
 import org.springframework.stereotype.Service;
 
 import javax.imageio.ImageIO;
 import java.awt.image.BufferedImage;
 import java.io.*;
+import java.util.Set;
 import java.util.UUID;
 
 /**
@@ -27,6 +28,7 @@ public class ImageFileProcessor {
     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,
                               ObjectNameService objectNameService, PutObjectService putObjectService) {
@@ -36,8 +38,8 @@ public class ImageFileProcessor {
         this.putObjectService = putObjectService;
     }
 
-    public void process(ObjectResult objectResult) {
-        String objectId = objectResult.getObjectId();
+    public UploadFileRet process(ObjectResult objectResult) {
+        String originalObjectId = objectResult.getObjectId();
         boolean duplicate = objectResult.isDuplicate();
         if (duplicate) {
             String dupObjectId = objectResult.getDupObjectId();
@@ -45,71 +47,76 @@ public class ImageFileProcessor {
 
             String jpegUrl = imageFile.getJpegUrl();
             String jpegObjectName = objectNameService.getObjectNameFromUrl(jpegUrl);
-            ObjectResult objectResult2 = putObjectService.copyObject(jpegObjectName);
-            String jpegUrl1 = objectResult2.getUploadFileRet().getUrl();
+            ObjectResult objectResult2 = putObjectService.copyObject(jpegObjectName, ".jpeg");
+            String jpegUrl1 = objectNameService.getObjectUrl(objectResult2.getObjectName());
 
             String webpUrl = imageFile.getWebpUrl();
             String webpObjectName = objectNameService.getObjectNameFromUrl(webpUrl);
-            ObjectResult objectResult3 = putObjectService.copyObject(webpObjectName);
-            String webpUrl1 = objectResult3.getUploadFileRet().getUrl();
+            ObjectResult objectResult3 = putObjectService.copyObject(webpObjectName, ".webp");
+            String webpUrl1 = objectNameService.getObjectUrl(objectResult3.getObjectName());
 
             int width = imageFile.getWidth();
             int height = imageFile.getHeight();
             boolean horizontal = imageFile.getHorizontal();
 
-            ImageFile imageFile1 = new ImageFile(objectId, width, height, horizontal, jpegUrl1, webpUrl1);
+            ImageFile imageFile1 = new ImageFile(originalObjectId, width, height, horizontal, jpegUrl1, webpUrl1);
             mediaRepository.saveImageFile(imageFile1);
-            return;
+            return new UploadFileRet(objectResult2.getObjectId(), jpegUrl1);
         }
 
-        String objectName = objectResult.getObjectName();
+        String originalObjectName = objectResult.getObjectName();
         String absolutePath = objectResult.getAbsolutePath();
         try {
-            String format = ImageOps.getFormat(new File(absolutePath));
+            ObjectResult objectResult1;
             String jpegUrl;
             String webpUrl;
-            if (format == null) {
-                jpegUrl = getJpegUrl(absolutePath);
-                webpUrl = getWebpUrl(absolutePath);
-            } else if (format.equalsIgnoreCase("jpg") || format.equalsIgnoreCase("jpeg")) {
-                jpegUrl = objectNameService.getObjectUrl(objectName);
-                webpUrl = getWebpUrl(absolutePath);
-            } else if (format.equalsIgnoreCase("webp")) {
-                jpegUrl = getJpegUrl(absolutePath);
-                webpUrl = objectNameService.getObjectUrl(objectName);
+            String format = ImageOps.getFormat(new File(absolutePath));
+            if (imageFormats.contains(format)) {
+                objectResult1 = putObjectService.copyObject(originalObjectName, "."+format);
+                jpegUrl = objectNameService.getObjectUrl(objectResult1.getObjectName());
             } else {
-                jpegUrl = getJpegUrl(absolutePath);
-                webpUrl = getWebpUrl(absolutePath);
+                jpegUrl = getJpegUrl(originalObjectName, absolutePath);
+            }
+
+            if (format.equalsIgnoreCase("webp")) {
+                objectResult1 = putObjectService.copyObject(originalObjectName, "."+format);
+                webpUrl = objectNameService.getObjectUrl(objectResult1.getObjectName());
+            } else {
+                webpUrl = getWebpUrl(originalObjectName, absolutePath);
             }
 
             ImageOps.Size size = ImageOps.info(new File(absolutePath));
             boolean horizontal = size.getWidth() > size.getHeight();
             ImageFile imageFile =
-                    new ImageFile(objectId, size.getWidth(), size.getHeight(), horizontal, jpegUrl, webpUrl);
+                    new ImageFile(originalObjectId, size.getWidth(), size.getHeight(), horizontal, jpegUrl, webpUrl);
             mediaRepository.saveImageFile(imageFile);
+
+            return new UploadFileRet("objectResult1.getObjectId()", jpegUrl);
         } catch (Exception e) {
             e.printStackTrace();
         }
+
+        return null;
     }
 
-    private String getJpegUrl(String originalPath) throws Exception {
+    private String getJpegUrl(String originalObjectName, String originalPath) throws Exception {
         byte[] bytes = ImageOps.convert2jpg(new File(originalPath));
-        return saveImage(bytes, ".jpeg");
+        return saveImage(originalObjectName, bytes, ".jpeg");
     }
 
-    private String getWebpUrl(String originalPath) throws Exception {
+    private String getWebpUrl(String originalObjectName, String originalPath) throws Exception {
         BufferedImage bi = ImageIO.read(new File(originalPath));
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         ImageIO.write(bi, "webp", baos);
-        return saveImage(baos.toByteArray(), ".webp");
+        return saveImage(originalObjectName, baos.toByteArray(), ".webp");
     }
 
-    private String saveImage(byte[] bytes, String suffix) throws Exception {
-        ObjectProp objectProp = objectNameService.getObjectProp(UploadChannel.cover.getCode());
+    private String saveImage(String originalObjectName, byte[] bytes, String suffix) throws Exception {
+        ObjectProp objectProp = objectNameService.getObjectProp(originalObjectName, suffix);
         String contentId = UUID.randomUUID().toString().replace("-", "");
         File savedFile = fileStoreService.saveFile(bytes, contentId);
         String sha256sum = DigestUtil.sha256sum(savedFile.getAbsolutePath());
         ObjectResult objectResult = putObjectService.putObject(objectProp, contentId, savedFile, "", sha256sum);
-        return objectResult.getUploadFileRet().getUrl();
+        return objectNameService.getObjectUrl(objectResult.getObjectName());
     }
 }

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

@@ -18,6 +18,7 @@ import cn.reghao.jutil.media.FFmpegWrapper;
 import cn.reghao.jutil.media.MediaQuality;
 import cn.reghao.jutil.media.MediaResolution;
 import cn.reghao.jutil.jdk.thread.ThreadPoolWrapper;
+import cn.reghao.oss.api.rest.UploadFileRet;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
@@ -51,7 +52,8 @@ public class VideoFileProcessor {
         this.fileStoreService = fileStoreService;
     }
 
-    public void process(ObjectResult objectResult) {
+    public UploadFileRet process(ObjectResult objectResult) {
+        String objectName = objectResult.getObjectName();
         String objectId = objectResult.getObjectId();
         boolean duplicate = objectResult.isDuplicate();
         if (duplicate) {
@@ -67,29 +69,29 @@ public class VideoFileProcessor {
             int width = videoUrl.getWidth();
             int height = videoUrl.getHeight();
 
-            String url = objectResult.getUploadFileRet().getUrl();
+            String url = objectNameService.getObjectUrl(objectName);
             String objectName1 = objectNameService.getObjectNameFromUrl(url);
-            ObjectResult objectResult1 = putObjectService.copyObject(objectName1);
+            ObjectResult objectResult1 = putObjectService.copyObject(objectName1, ".mp4");
             String objectId1 = objectResult1.getObjectId();
-            String url1 = objectResult1.getUploadFileRet().getUrl();
+            String url1 = objectNameService.getObjectUrl(objectName1);
 
             VideoUrl videoUrl1 = new VideoUrl(objectId, objectId1, urlType, url1, quality, width, height);
             mediaRepository.saveVideoFile(videoFile1, videoUrl1);
-            return;
+
+            return new UploadFileRet(objectId1, url1);
         }
 
-        String objectName = objectResult.getObjectName();
         String absolutePath = objectResult.getAbsolutePath();
         MediaProps mediaProps = FFmpegWrapper.getMediaProps(absolutePath);
         if (mediaProps == null) {
             log.info("{} 的 FFmpeg 媒体信息为 null", objectName);
-            return;
+            return null;
         }
 
         VideoProps videoProps = mediaProps.getVideoProps();
         if (videoProps == null) {
             log.info("{} 的 FFmpeg 视频信息为 null", objectName);
-            return;
+            return null;
         }
 
         String videoCodec = mediaProps.getVideoProps().getCodecName();
@@ -97,11 +99,11 @@ public class VideoFileProcessor {
             AudioProps audioProps = mediaProps.getAudioProps();
             if (audioProps != null && !audioCodecs.contains(audioProps.getCodecName())) {
                 log.error("{} 对象的音频非 aac 编码, 暂不处理", objectName);
-                return;
+                return null;
             }
         } else {
             log.error("{} 对象的视频非 h264 编码, 暂不处理", objectName);
-            return;
+            return null;
         }
 
         String videoFileId = objectId;
@@ -115,18 +117,21 @@ public class VideoFileProcessor {
         String urlType = FileType.getVideoUrlType(absolutePath);
 
         String originalObjectName = objectResult.getObjectName();
-        ObjectResult objectResult1 = putObjectService.copyObject(originalObjectName);
+        ObjectResult objectResult1 = putObjectService.copyObject(originalObjectName, ".mp4");
+        String objectName1 = objectResult1.getObjectName();
         String objectId1 = objectResult1.getObjectId();
-        String url = objectResult1.getUploadFileRet().getUrl();
+        String url1 = objectNameService.getObjectUrl(objectName1);
 
-        VideoUrl videoUrl  = new VideoUrl(videoFileId, objectId1, urlType, url, mediaResolution);;
+        VideoUrl videoUrl  = new VideoUrl(videoFileId, objectId1, urlType, url1, mediaResolution);;
         mediaRepository.saveVideoFile(videoFile, videoUrl);
 
+        return new UploadFileRet(objectId1, url1);
         //log.info("添加视频格式转码任务");
         //threadPool.submit(new ConvertTask());
     }
 
-    private VideoUrl getConvertedVideoUrl(String videoFileId, File file, int width, int height) {
+    private VideoUrl getConvertedVideoUrl(String videoFileId, File file, String originalObjectName,
+                                          int width, int height, String suffix) {
         String contentId = UUID.randomUUID().toString().replace("-", "");
         fileStoreService.genFilePath(contentId, file.length());
         String absolutePath = fileStoreService.genFilePath(contentId, file.length());
@@ -136,19 +141,19 @@ public class VideoFileProcessor {
                 throw new IOException(absolutePath + " exist");
             }
 
-            String suffix = "mp4";
-            int ret = FFmpegWrapper.formatCovert(file.getAbsolutePath(), absolutePath + "." + suffix, suffix);
+            String format = suffix.replace(".", "");
+            int ret = FFmpegWrapper.formatCovert(file.getAbsolutePath(), absolutePath + suffix, format);
             if (ret != 0) {
                 throw new Exception("视频转码失败");
             }
             String sha256sum = DigestUtil.sha256sum(absolutePath);
 
-            ObjectProp objectProp = objectNameService.getObjectProp(UploadChannel.video.getCode());
+            ObjectProp objectProp = objectNameService.getObjectProp(originalObjectName, suffix);
             String originalFilename = "";
             ObjectResult objectResult = putObjectService.putObject(objectProp, contentId, savedFile, originalFilename, sha256sum);
 
-            String objectId = objectResult.getUploadFileRet().getUploadId();
-            String url = objectResult.getUploadFileRet().getUrl();
+            String objectId = objectResult.getObjectId();
+            String url = objectNameService.getObjectUrl(objectResult.getObjectName());
             String urlType = FileType.getVideoUrlType(absolutePath);
             MediaResolution mediaResolution = MediaQuality.getQuality(width, height);
             return new VideoUrl(videoFileId, objectId, urlType, url, mediaResolution);