|
|
@@ -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);
|