reghao před 2 roky
rodič
revize
db99a6cbea

+ 10 - 8
dfs-store/src/main/java/cn/reghao/dfs/store/controller/ObjectUploadController.java

@@ -1,8 +1,9 @@
 package cn.reghao.dfs.store.controller;
 
+import cn.reghao.dfs.store.model.vo.ObjectProp;
 import cn.reghao.dfs.store.service.FileStoreService;
+import cn.reghao.dfs.store.service.ObjectNameService;
 import cn.reghao.dfs.store.service.PutObjectService;
-import cn.reghao.dfs.store.util.ObjectUtil;
 import cn.reghao.jutil.jdk.result.WebResult;
 import cn.reghao.jutil.jdk.security.DigestUtil;
 import cn.reghao.jutil.web.ServletUtil;
@@ -26,10 +27,13 @@ import java.util.UUID;
 @RestController
 public class ObjectUploadController {
     private final FileStoreService fileStoreService;
+    private final ObjectNameService objectNameService;
     private final PutObjectService putObjectService;
 
-    public ObjectUploadController(FileStoreService fileStoreService, PutObjectService putObjectService) {
+    public ObjectUploadController(FileStoreService fileStoreService, ObjectNameService objectNameService,
+                                  PutObjectService putObjectService) {
         this.fileStoreService = fileStoreService;
+        this.objectNameService = objectNameService;
         this.putObjectService = putObjectService;
     }
 
@@ -48,13 +52,12 @@ public class ObjectUploadController {
                 return WebResult.failWithMsg("sha256sum not match");
             }
 
-            String objectName = ObjectUtil.getObjectName(channelId);
-            String pid = putObjectService.getPid(objectName);
+            ObjectProp objectProp = objectNameService.getObjectProp(channelId);
             String contentId = UUID.randomUUID().toString().replace("-", "");
             String originalFilename = file.getName();
             long size = file.length();
             File savedFile = fileStoreService.saveFile(file.getAbsolutePath(), contentId, size);
-            UploadFileRet uploadFileRet = putObjectService.putObject(pid, objectName, contentId, savedFile, originalFilename, sha256sum);
+            UploadFileRet uploadFileRet = putObjectService.putObject(objectProp, contentId, savedFile, originalFilename, sha256sum);
 
             // TODO PutMessageConverter 中生成的文件需要显式删除
             FileUtils.deleteQuietly(file);
@@ -76,10 +79,9 @@ public class ObjectUploadController {
             return WebResult.failWithMsg("sha256sum not match");
         }
 
-        String objectName = ObjectUtil.getObjectName(channelId);
-        String pid = putObjectService.getPid(objectName);
+        ObjectProp objectProp = objectNameService.getObjectProp(channelId);
         String originalFilename = file.getOriginalFilename();
-        UploadFileRet uploadFileRet = putObjectService.putObject(pid, objectName, contentId, savedFile, originalFilename, sha256sum);
+        UploadFileRet uploadFileRet = putObjectService.putObject(objectProp, contentId, savedFile, originalFilename, sha256sum);
         return WebResult.success(uploadFileRet);
     }
 }

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

@@ -48,4 +48,6 @@ public interface FileMetaMapper extends BaseMapper<FileMeta> {
     List<FileMeta> findFileInfos(@Param("objectIds") List<String> objectIds);
     List<FileMeta> findByFilename(@Param("pid") String pid, @Param("filename") String filename);
     List<FileMeta> findByPid(String pid);
+    List<String> findObjectPrefix();
+    Integer findAclByObjectPrefix(String objectPrefix);
 }

+ 2 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/inerceptor/AccessLogInterceptor.java

@@ -59,9 +59,11 @@ public class AccessLogInterceptor implements HandlerInterceptor {
             String objectName = URLDecoder.decode(uri, StandardCharsets.UTF_8).replaceFirst("/", "");
             FileMeta fileMeta = objectRepository.getByObjectName(objectName);
             if (fileMeta == null) {
+                response.setStatus(HttpServletResponse.SC_NOT_FOUND);
                 return false;
             }
 
+            boolean diskFile = fileMeta.getDiskFile();
             int acl = fileMeta.getAcl();
             if (acl == 1) {
                 response.setStatus(HttpServletResponse.SC_FORBIDDEN);

+ 14 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/model/constant/ObjectACL.java

@@ -5,5 +5,18 @@ package cn.reghao.dfs.store.model.constant;
  * @date 2023-05-19 18:15:45
  */
 public enum ObjectACL {
-    PRIVATE,PROTECT,FRIEND,PUBLIC
+    PRIVATE(1),
+    PROTECT(2),
+    FRIEND(3),
+    PUBLIC(4);
+
+    private final int code;
+
+    ObjectACL(int code) {
+        this.code = code;
+    }
+
+    public int getCode() {
+        return code;
+    }
 }

+ 8 - 8
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/FileMeta.java

@@ -30,7 +30,7 @@ public class FileMeta extends BaseObject<Integer> {
     private int acl;
 
     // 目录对象
-    public FileMeta(String objectName, String objectId, String filename, String pid) {
+    public FileMeta(String objectName, String objectId, String filename, String pid, int acl) {
         this.objectName = objectName;
         this.objectId = objectId;
         this.contentId = "0";
@@ -42,11 +42,11 @@ public class FileMeta extends BaseObject<Integer> {
         this.pid = pid;
         this.uploadBy = UserContext.getUser();
         this.diskFile = false;
-        this.acl = 1;
+        this.acl = acl;
     }
 
     public FileMeta(String objectName, String objectId, String contentId, String filename, long size,
-                    int fileType, String contentType, String sha256sum, String pid) {
+                    int fileType, String contentType, String sha256sum, String pid, boolean diskFile, int acl) {
         this.objectName = objectName;
         this.objectId = objectId;
         this.contentId = contentId;
@@ -57,11 +57,11 @@ public class FileMeta extends BaseObject<Integer> {
         this.sha256sum = sha256sum;
         this.pid = pid;
         this.uploadBy = UserContext.getUser();
-        this.diskFile = false;
-        this.acl = 1;
+        this.diskFile = diskFile;
+        this.acl = acl;
     }
 
-    public FileMeta(String objectName, String objectId, String filename, FileMeta fileMeta) {
+    public FileMeta(String objectName, String objectId, String filename, FileMeta fileMeta, boolean diskFile, int acl) {
         this.objectName = objectName;
         this.objectId = objectId;
         this.contentId = fileMeta.getContentId();
@@ -72,7 +72,7 @@ public class FileMeta extends BaseObject<Integer> {
         this.sha256sum = fileMeta.getSha256sum();
         this.pid = fileMeta.getPid();
         this.uploadBy = UserContext.getUser();
-        this.diskFile = fileMeta.getDiskFile();
-        this.acl = fileMeta.getAcl();
+        this.diskFile = diskFile;
+        this.acl = acl;
     }
 }

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

@@ -0,0 +1,18 @@
+package cn.reghao.dfs.store.model.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author reghao
+ * @date 2023-06-02 16:13:50
+ */
+@AllArgsConstructor
+@Getter
+public class ObjectProp {
+    private String objectName;
+    private boolean diskFile;
+    private int acl;
+    private String objectPrefix;
+    private String pid;
+}

+ 21 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/rpc/ObjectServiceImpl.java

@@ -1,11 +1,15 @@
 package cn.reghao.dfs.store.rpc;
 
+import cn.reghao.dfs.store.model.po.FileMeta;
+import cn.reghao.dfs.store.service.ObjectNameService;
 import cn.reghao.oss.api.dto.ObjectMeta;
 import cn.reghao.oss.api.iface.ObjectService;
 import cn.reghao.dfs.store.db.mapper.FileMetaMapper;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @author reghao
  * @date 2023-05-28 23:26:03
@@ -14,9 +18,25 @@ import org.springframework.stereotype.Service;
 @Service
 public class ObjectServiceImpl implements ObjectService {
     private final FileMetaMapper fileMetaMapper;
+    private final ObjectNameService objectNameService;
 
-    public ObjectServiceImpl(FileMetaMapper fileMetaMapper) {
+    public ObjectServiceImpl(FileMetaMapper fileMetaMapper, ObjectNameService objectNameService) {
         this.fileMetaMapper = fileMetaMapper;
+        this.objectNameService = objectNameService;
+    }
+
+    @Override
+    public void putObjectPrefix(String objectPrefix, int acl) {
+        FileMeta fileMeta = fileMetaMapper.findByObjectName(objectPrefix);
+        if (fileMeta != null) {
+            return;
+        }
+        objectNameService.createParentDirs(objectPrefix, acl);
+    }
+
+    @Override
+    public List<String> getObjectPrefix() {
+        return fileMetaMapper.findObjectPrefix();
     }
 
     @Override

+ 2 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/rpc/disk/FileServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.reghao.dfs.store.rpc.disk;
 
+import cn.reghao.dfs.store.model.constant.ObjectACL;
 import cn.reghao.oss.api.dto.DirProp;
 import cn.reghao.oss.api.dto.FileProp;
 import cn.reghao.oss.api.iface.disk.FileService;
@@ -47,7 +48,7 @@ public class FileServiceImpl implements FileService {
         String filename1 = checkFilename(pid, filename);
         String fileId = UUID.randomUUID().toString().replace("-", "");
         String objectName = String.format("disk/0/1/%s/", fileId);
-        FileMeta fileMeta = new FileMeta(objectName, fileId, filename1, pid);
+        FileMeta fileMeta = new FileMeta(objectName, fileId, filename1, pid, ObjectACL.PRIVATE.getCode());
         fileMetaMapper.save(fileMeta);
     }
 

+ 11 - 9
dfs-store/src/main/java/cn/reghao/dfs/store/service/ObjectMultipartUploadService.java

@@ -3,7 +3,7 @@ package cn.reghao.dfs.store.service;
 import cn.reghao.dfs.store.config.OssProperties;
 import cn.reghao.dfs.store.db.mapper.FileMetaMapper;
 import cn.reghao.dfs.store.model.dto.PathUrl;
-import cn.reghao.dfs.store.util.ObjectUtil;
+import cn.reghao.dfs.store.model.vo.ObjectProp;
 import cn.reghao.oss.common.UploadFilePart;
 import cn.reghao.oss.common.UploadPrepare;
 import cn.reghao.oss.common.UploadPrepareRet;
@@ -30,13 +30,16 @@ public class ObjectMultipartUploadService {
     private final FileStoreService fileStoreService;
     private final Map<String, Set<Long>> map = new HashMap<>();
     private final Map<String, PathUrl> pathMap = new HashMap<>();
+    private final ObjectNameService objectNameService;
     private final PutObjectService putObjectService;
     private final String domain;
 
     public ObjectMultipartUploadService(FileMetaMapper fileMetaMapper, FileStoreService fileStoreService,
-                                        PutObjectService putObjectService, OssProperties ossProperties) {
+                                        ObjectNameService objectNameService, PutObjectService putObjectService,
+                                        OssProperties ossProperties) {
         this.fileMetaMapper = fileMetaMapper;
         this.fileStoreService = fileStoreService;
+        this.objectNameService = objectNameService;
         this.putObjectService = putObjectService;
         this.domain = ossProperties.getDomain();
     }
@@ -73,10 +76,10 @@ public class ObjectMultipartUploadService {
         String sha256sum = uploadFilePart.getIdentifier();
         FileMeta fileMeta = fileMetaMapper.findBySha256sum(sha256sum);
         if (fileMeta != null) {
-            String objectName = ObjectUtil.getObjectName(uploadFilePart.getChannelId());
-            putObjectService.copyObject(objectName, filename, fileMeta);
+            ObjectProp objectProp = objectNameService.getObjectProp(uploadFilePart.getChannelId());
+            putObjectService.copyObject(objectProp, filename, fileMeta);
 
-            String url = String.format("https://%s/%s", domain, objectName);
+            String url = String.format("https://%s/%s", domain, objectProp);
             return new UploadFileRet(sha256sum, url);
         }
 
@@ -110,14 +113,13 @@ public class ObjectMultipartUploadService {
             }
 
             int channelId = uploadFilePart.getChannelId();
-            String pid = uploadFilePart.getPid();
-            String objectName = ObjectUtil.getObjectName(channelId);
+            ObjectProp objectProp = objectNameService.getObjectProp(channelId);
             File savedFile = new File(absolutePath);
-            putObjectService.putObject(pid, objectName, contentId, savedFile, filename, absolutePath);
+            putObjectService.putObject(objectProp, contentId, savedFile, filename, absolutePath);
 
             map.remove(sha256sum);
             pathMap.remove(sha256sum);
-            String url = String.format("https://%s/%s", domain, objectName);
+            String url = String.format("https://%s/%s", domain, objectProp);
             return new UploadFileRet(sha256sum, url);
         }
     }

+ 86 - 0
dfs-store/src/main/java/cn/reghao/dfs/store/service/ObjectNameService.java

@@ -0,0 +1,86 @@
+package cn.reghao.dfs.store.service;
+
+import cn.reghao.dfs.store.db.repository.ObjectRepository;
+import cn.reghao.dfs.store.model.constant.ObjectACL;
+import cn.reghao.dfs.store.model.constant.UploadChannel;
+import cn.reghao.dfs.store.model.po.FileMeta;
+import cn.reghao.dfs.store.model.vo.ObjectProp;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * @author reghao
+ * @date 2023-06-02 16:22:50
+ */
+@Service
+public class ObjectNameService {
+    private final ObjectRepository objectRepository;
+
+    public ObjectNameService(ObjectRepository objectRepository) {
+        this.objectRepository = objectRepository;
+    }
+
+    public ObjectProp getObjectProp(int channelId) throws Exception {
+        String objectPrefix = UploadChannel.getPrefix(channelId);
+        if (objectPrefix == null) {
+            throw new Exception("channelId 不合法");
+        }
+
+        String objectName = objectPrefix + UUID.randomUUID().toString().replace("-", "");
+        boolean diskFile;
+        int acl;
+        if (channelId == UploadChannel.disk.getCode()) {
+            diskFile = true;
+            acl = ObjectACL.PRIVATE.getCode();
+        } else {
+            diskFile = false;
+            acl = ObjectACL.PUBLIC.getCode();
+        }
+
+        FileMeta fileMeta = objectRepository.getByObjectName(objectPrefix);
+        if (fileMeta == null) {
+            throw new Exception("objectPrefix 不合法");
+        }
+
+        String pid = fileMeta.getObjectId();
+        return new ObjectProp(objectName, diskFile, acl, objectPrefix, pid);
+    }
+
+    public void createParentDirs(String objectName, int acl) {
+        List<String> list = getSortedParent(objectName);
+        List<FileMeta> fileMetas = new ArrayList<>();
+        for (int i = 0; i < list.size(); i++) {
+            String parentName = list.get(i);
+            FileMeta fileMeta = objectRepository.getByObjectName(parentName);
+            if (fileMeta == null) {
+                String pid;
+                if (i == 0) {
+                    pid = "0";
+                } else {
+                    pid = objectRepository.getByObjectName(list.get(i-1)).getObjectId();
+                }
+                String objectId = UUID.randomUUID().toString().replace("-", "");
+                String[] names = parentName.split("/");
+                String filename = names[names.length-1];
+                fileMetas.add(new FileMeta(parentName, objectId, filename, pid, acl));
+            }
+        }
+
+        if (!fileMetas.isEmpty()) {
+            objectRepository.saveFileMetas(fileMetas);
+        }
+    }
+
+    private List<String> getSortedParent(String objectName) {
+        String[] arr = objectName.split("/");
+        List<String> list = new ArrayList<>();
+        list.add(arr[0] + "/");
+        for (int i = 1; i < arr.length; i++) {
+            list.add(list.get(i-1) + arr[i] + "/");
+        }
+        return list;
+    }
+}

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

@@ -4,6 +4,7 @@ import cn.reghao.dfs.store.config.OssProperties;
 import cn.reghao.dfs.store.db.repository.ObjectRepository;
 import cn.reghao.dfs.store.model.po.DataBlock;
 import cn.reghao.dfs.store.model.po.FileMeta;
+import cn.reghao.dfs.store.model.vo.ObjectProp;
 import cn.reghao.jutil.jdk.security.DigestUtil;
 import cn.reghao.jutil.jdk.shell.Shell;
 import cn.reghao.oss.common.UploadFileRet;
@@ -12,7 +13,6 @@ import org.apache.commons.io.FileUtils;
 import org.springframework.stereotype.Service;
 
 import java.io.*;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 
@@ -33,10 +33,12 @@ public class PutObjectService {
         this.domain = ossProperties.getDomain();
     }
 
-    public UploadFileRet putObject(String pid, String objectName, String contentId, File savedFile, String originalFilename, String sha256sum) {
+    public UploadFileRet putObject(ObjectProp objectProp, String contentId, File savedFile, String originalFilename, String sha256sum) {
+        String pid = objectProp.getPid();
+        String objectName = objectProp.getObjectName();
         FileMeta fileMeta = objectRepository.getBySha256sum(sha256sum);
         if (fileMeta != null) {
-            copyObject(objectName, originalFilename, fileMeta);
+            copyObject(objectProp, originalFilename, fileMeta);
             FileUtils.deleteQuietly(savedFile);
 
             String objectId = objectRepository.getByObjectName(objectName).getObjectId();
@@ -49,7 +51,10 @@ public class PutObjectService {
             String contentType = getMediaType(savedPath);
             int fileType = getFileType(contentType);
 
-            fileMeta = new FileMeta(objectName, objectId, contentId, originalFilename, size, fileType, contentType, sha256sum, pid);
+            boolean diskFile = objectProp.isDiskFile();
+            int acl = objectProp.getAcl();
+            fileMeta = new FileMeta(objectName, objectId, contentId, originalFilename, size,
+                    fileType, contentType, sha256sum, pid, diskFile, acl);
             String blockId = UUID.randomUUID().toString();
             List<DataBlock> list = List.of(new DataBlock(contentId, 0, blockId, savedPath));
             objectRepository.saveObject(fileMeta, list);
@@ -59,20 +64,12 @@ public class PutObjectService {
         }
     }
 
-    public String getPid(String objectName) {
-        addParent(objectName);
-        int idx = objectName.lastIndexOf("/");
-        String objectName1 = objectName.substring(0, idx+1);
-        FileMeta fileMeta1 = objectRepository.getByObjectName(objectName1);
-        return fileMeta1.getObjectId();
-    }
-
     public void putObject(String objectName, byte[] bytes) {
         try {
             String sha256sum = DigestUtil.sha256sum(bytes);
             FileMeta fileMeta = objectRepository.getBySha256sum(sha256sum);
             if (fileMeta != null) {
-                copyObject(objectName, objectName, fileMeta);
+                //copyObject(objectName, objectName, fileMeta);
             } else {
                 String pid = "";
                 String contentId = "";
@@ -84,47 +81,15 @@ public class PutObjectService {
         }
     }
 
-    public void copyObject(String objectName, String filename, FileMeta fileMeta) {
+    public void copyObject(ObjectProp objectProp, String filename, FileMeta fileMeta) {
+        String objectName = objectProp.getObjectName();
         String objectId = UUID.randomUUID().toString().replace("-", "");
-        FileMeta fileMeta1 = new FileMeta(objectName, objectId, filename, fileMeta);
+        boolean diskFile = objectProp.isDiskFile();
+        int acl = objectProp.getAcl();
+        FileMeta fileMeta1 = new FileMeta(objectName, objectId, filename, fileMeta, diskFile, acl);
         objectRepository.saveFileMeta(fileMeta1);
     }
 
-    private void addParent(String objectName) {
-        List<String> list = getSortedParent(objectName);
-        List<FileMeta> fileMetas = new ArrayList<>();
-        for (int i = 0; i < list.size(); i++) {
-            String parentName = list.get(i);
-            FileMeta fileMeta = objectRepository.getByObjectName(parentName);
-            if (fileMeta == null) {
-                String pid;
-                if (i == 0) {
-                    pid = "0";
-                } else {
-                    pid = objectRepository.getByObjectName(list.get(i-1)).getObjectId();
-                }
-                String objectId = UUID.randomUUID().toString().replace("-", "");
-                String[] names = parentName.split("/");
-                String filename = names[names.length-1];
-                fileMetas.add(new FileMeta(parentName, objectId, filename, pid));
-            }
-        }
-
-        if (!fileMetas.isEmpty()) {
-            objectRepository.saveFileMetas(fileMetas);
-        }
-    }
-
-    private List<String> getSortedParent(String objectName) {
-        String[] arr = objectName.split("/");
-        List<String> list = new ArrayList<>();
-        list.add(arr[0] + "/");
-        for (int i = 1; i < arr.length-1; i++) {
-            list.add(list.get(i-1) + arr[i] + "/");
-        }
-        return list;
-    }
-
     private String getMediaType(String src) {
         String cmd = String.format("/bin/file -b --mime-type \"%s\"", src);
         return Shell.execWithResult(cmd);

+ 0 - 10
dfs-store/src/main/java/cn/reghao/dfs/store/util/ObjectUtil.java

@@ -1,12 +1,10 @@
 package cn.reghao.dfs.store.util;
 
-import cn.reghao.dfs.store.model.constant.UploadChannel;
 import cn.reghao.jutil.web.ServletUtil;
 
 import javax.servlet.http.HttpServletRequest;
 import java.net.URLDecoder;
 import java.nio.charset.StandardCharsets;
-import java.util.UUID;
 
 /**
  * @author reghao
@@ -19,12 +17,4 @@ public class ObjectUtil {
         String uri1 = URLDecoder.decode(uri, StandardCharsets.UTF_8);
         return uri1.replaceFirst("/", "");
     }
-
-    public static String getObjectName(int channelId) throws Exception {
-        String prefix = UploadChannel.getPrefix(channelId);
-        if (prefix == null) {
-            throw new Exception("channelId 不合法");
-        }
-        return prefix + UUID.randomUUID().toString().replace("-", "");
-    }
 }

+ 6 - 19
dfs-store/src/main/java/cn/reghao/dfs/store/util/media/FFmpegWrapper.java

@@ -6,8 +6,6 @@ import cn.reghao.dfs.store.util.media.po.VideoProps;
 import cn.reghao.jutil.jdk.converter.DateTimeConverter;
 import cn.reghao.jutil.jdk.serializer.JsonConverter;
 import cn.reghao.jutil.jdk.shell.Shell;
-import cn.reghao.jutil.jdk.shell.ShellExecutor;
-import cn.reghao.jutil.jdk.shell.ShellResult;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
@@ -19,7 +17,6 @@ import java.time.LocalDateTime;
  * @date 2022-03-04 11:04:32
  */
 public class FFmpegWrapper {
-    static ShellExecutor shellExecutor = new ShellExecutor();
     private final static String ffprobe = "/usr/bin/ffprobe";
     private final static String ffmpeg = "/usr/bin/ffmpeg";
 
@@ -106,27 +103,17 @@ public class FFmpegWrapper {
         return Shell.exec(cmd);
     }
 
-    public static void mergeToMp4(String dir, String videoId, String videoFilePath, String audioFilePath) throws Exception {
+    public static void mp4ToM3u8() {
+
+    }
+
+    public static void m3u8ToMp4(String dir, String videoId, String videoFilePath, String audioFilePath) throws Exception {
         String mp4FilePath = String.format("%s/%s.mp4", dir, videoId);
 
         StringBuilder sb = new StringBuilder();
         sb.append("ffmpeg -i ").append(audioFilePath).append(" ")
                 .append("-i ").append(videoFilePath).append(" ")
                 .append("-codec copy ").append(mp4FilePath);
-        ShellResult shellResult = shellExecutor.exec(dir, sb.toString().split("\\s+"));
-        if (!shellResult.isSuccess()) {
-            throw new Exception("合并成 mp4 文件异常: " + shellResult.getResult());
-        }
-    }
-
-    public static void generateDash(String dir, String video, String audio) throws Exception {
-        StringBuilder sb = new StringBuilder();
-        sb.append("MP4Box -dash 5000 -rap -frag-rap -profile dashavc264:onDemand -frag 5000 ")
-                .append(video).append(" ").append(audio).append(" ")
-                .append("-out index.mpd");
-        ShellResult shellResult = shellExecutor.exec(dir, sb.toString().split("\\s+"));
-        if (!shellResult.isSuccess()) {
-            throw new Exception("生成 dash 异常: " + shellResult.getResult());
-        }
+        Shell.exec(sb.toString());
     }
 }

+ 14 - 5
dfs-store/src/main/resources/mapper/FileMetaMapper.xml

@@ -6,20 +6,20 @@
         insert into file_meta
         (`id`,`deleted`,`create_time`,`update_time`,`object_name`,`object_id`,`content_id`,`pid`,`filename`,`size`,`file_type`,`content_type`,`sha256sum`,`upload_by`,`disk_file`,`acl`)
         values
-        (#{id},#{deleted},#{createTime},#{updateTime},#{objectName},#{objectId},#{contentId},#{pid},#{filename},#{size},#{fileType},#{contentType},#{sha256sum},#{uploadBy},#{diskFile},#{acl})
+        (#{id},#{deleted},#{createTime},#{updateTime},#{objectProp},#{objectId},#{contentId},#{pid},#{filename},#{size},#{fileType},#{contentType},#{sha256sum},#{uploadBy},#{diskFile},#{acl})
     </insert>
     <insert id="saveAll" useGeneratedKeys="true" keyProperty="id">
         insert into file_meta
         (`id`,`deleted`,`create_time`,`update_time`,`object_name`,`object_id`,`content_id`,`pid`,`filename`,`size`,`file_type`,`content_type`,`sha256sum`,`upload_by`,`disk_file`,`acl`)
         values
         <foreach collection="list" item="item" index="index" separator=",">
-            (#{item.id},#{item.deleted},#{item.createTime},#{item.updateTime},#{item.objectName},#{item.objectId},#{item.contentId},#{item.pid},#{item.filename},#{item.size},#{item.fileType},#{item.contentType},#{item.sha256sum},#{item.uploadBy},#{item.diskFile},#{item.acl})
+            (#{item.id},#{item.deleted},#{item.createTime},#{item.updateTime},#{item.objectProp},#{item.objectId},#{item.contentId},#{item.pid},#{item.filename},#{item.size},#{item.fileType},#{item.contentType},#{item.sha256sum},#{item.uploadBy},#{item.diskFile},#{item.acl})
         </foreach>
     </insert>
 
     <update id="update">
         update file_meta
-        set object_name=#{objectName}
+        set object_name=#{objectProp}
         where object_id=#{objectId}
     </update>
     <update id="updateBatch">
@@ -78,7 +78,7 @@
     <select id="findByObjectName" resultType="cn.reghao.dfs.store.model.po.FileMeta">
         select *
         from file_meta
-        where object_name=#{objectName}
+        where object_name=#{objectProp}
     </select>
     <select id="findByObjectId" resultType="cn.reghao.dfs.store.model.po.FileMeta">
         select *
@@ -91,7 +91,7 @@
         from file_meta
         inner join data_block
         on file_meta.content_id=data_block.content_id
-        and file_meta.object_name=#{objectName}
+        and file_meta.object_name=#{objectProp}
     </select>
     <select id="findObjectMetaByPage" resultType="cn.reghao.oss.api.dto.ObjectMeta">
         select file_meta.size,file_meta.content_type,file_meta.object_name,data_block.absolute_path
@@ -193,4 +193,13 @@
         select * from file_meta
         where file_type!=1000
     </select>
+    <select id="findObjectPrefix" resultType="java.lang.String">
+        select * from file_meta
+        where file_type==1000
+    </select>
+    <select id="findAclByObjectPrefix" resultType="java.lang.Integer">
+        select acl
+        from file_meta
+        where object_prefix=#{objectPrefix}
+    </select>
 </mapper>

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

@@ -6,7 +6,7 @@
         insert into video_file
         (`id`,`deleted`,`create_time`,`update_time`,`video_file_id`,`object_name`,`horizontal`,`duration`,`activate`,`auth`)
         values 
-        (#{id},#{deleted},#{createTime},#{updateTime},#{videoFileId},#{objectName},#{horizontal},#{duration},#{activate},#{auth})
+        (#{id},#{deleted},#{createTime},#{updateTime},#{videoFileId},#{objectProp},#{horizontal},#{duration},#{activate},#{auth})
     </insert>
 
     <select id="findAll" resultType="cn.reghao.dfs.store.model.po.VideoFile">

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

@@ -6,7 +6,7 @@
         insert into video_url
         (`video_file_id`,`object_name`,`url_type`,`width`,`height`,`quality`,`url`)
         values
-        (#{videoFileId},#{objectName},#{urlType},#{width},#{height},#{quality},#{url})
+        (#{videoFileId},#{objectProp},#{urlType},#{width},#{height},#{quality},#{url})
     </insert>
 
     <select id="findVideoUrls" resultType="cn.reghao.oss.api.dto.VideoUrlDto">