|
@@ -8,7 +8,7 @@ import cn.reghao.oss.store.db.repository.ObjectRepository;
|
|
|
import cn.reghao.oss.store.model.po.FilePart;
|
|
import cn.reghao.oss.store.model.po.FilePart;
|
|
|
import cn.reghao.oss.store.model.po.FileMultipart;
|
|
import cn.reghao.oss.store.model.po.FileMultipart;
|
|
|
import cn.reghao.oss.store.model.vo.ObjectProp;
|
|
import cn.reghao.oss.store.model.vo.ObjectProp;
|
|
|
-import cn.reghao.oss.store.util.FileType;
|
|
|
|
|
|
|
+import cn.reghao.oss.store.model.vo.ObjectResult;
|
|
|
import cn.reghao.oss.store.util.StringUtil;
|
|
import cn.reghao.oss.store.util.StringUtil;
|
|
|
import cn.reghao.jutil.jdk.security.DigestUtil;
|
|
import cn.reghao.jutil.jdk.security.DigestUtil;
|
|
|
import cn.reghao.oss.store.model.po.FileMeta;
|
|
import cn.reghao.oss.store.model.po.FileMeta;
|
|
@@ -18,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
import java.io.*;
|
|
import java.io.*;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* @author reghao
|
|
* @author reghao
|
|
@@ -44,54 +45,34 @@ public class ObjectMultipartUploadService {
|
|
|
this.filePartRepository = filePartRepository;
|
|
this.filePartRepository = filePartRepository;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public synchronized UploadPrepareRet prepareUpload(UploadPrepare uploadPrepare, ObjectChannel objectChannel) throws Exception {
|
|
|
|
|
- String filename = uploadPrepare.getFilename();
|
|
|
|
|
- String sha256sum = uploadPrepare.getSha256sum();
|
|
|
|
|
- String contentType = uploadPrepare.getContentType();
|
|
|
|
|
- long size = uploadPrepare.getSize();
|
|
|
|
|
|
|
+ public UploadedPart getUploadedPart(UploadFilePart uploadFilePart, ObjectChannel objectChannel) throws Exception {
|
|
|
|
|
+ String sha256sum = uploadFilePart.getIdentifier();
|
|
|
FileMeta fileMeta = objectRepository.getBySha256sum(sha256sum);
|
|
FileMeta fileMeta = objectRepository.getBySha256sum(sha256sum);
|
|
|
- if (fileMeta == null) {
|
|
|
|
|
- String suffix = StringUtil.getSuffix(filename);
|
|
|
|
|
- ObjectProp objectProp = objectNameService.getObjectProp(objectChannel, suffix);
|
|
|
|
|
- String pid = objectProp.getPid();
|
|
|
|
|
- String objectName = objectProp.getObjectName();
|
|
|
|
|
- String objectId = UUID.randomUUID().toString().replace("-", "");
|
|
|
|
|
- int fileType = FileType.getFileType(contentType);
|
|
|
|
|
- //int scope = objectProp.getScope();
|
|
|
|
|
- String contentId = UUID.randomUUID().toString().replace("-", "");
|
|
|
|
|
-
|
|
|
|
|
- int scope = 0;
|
|
|
|
|
- fileMeta = new FileMeta(objectName, objectId, contentId, filename, size, fileType, contentType, sha256sum, pid, scope);
|
|
|
|
|
- objectRepository.saveFileMeta(fileMeta);
|
|
|
|
|
- return new UploadPrepareRet(objectId, PART_SIZE, false, null);
|
|
|
|
|
- } else {
|
|
|
|
|
- String suffix = StringUtil.getSuffix(filename);
|
|
|
|
|
|
|
+ if (fileMeta != null) {
|
|
|
|
|
+ String filename = uploadFilePart.getFilename();
|
|
|
|
|
+ String objectName = fileMeta.getObjectName();
|
|
|
|
|
+ String suffix = StringUtil.getSuffix(objectName);
|
|
|
|
|
+
|
|
|
ObjectProp objectProp = objectNameService.getObjectProp(objectChannel, suffix);
|
|
ObjectProp objectProp = objectNameService.getObjectProp(objectChannel, suffix);
|
|
|
- String pid = objectProp.getPid();
|
|
|
|
|
- String toObjectName = objectProp.getObjectName();
|
|
|
|
|
- String toObjectId = UUID.randomUUID().toString().replace("-", "");
|
|
|
|
|
- int scope = objectProp.getScope();
|
|
|
|
|
-
|
|
|
|
|
- FileMeta fileMeta1 = new FileMeta(toObjectName, toObjectId, filename, fileMeta, pid, scope);
|
|
|
|
|
- objectRepository.saveFileMeta(fileMeta1);
|
|
|
|
|
- return new UploadPrepareRet(toObjectId, PART_SIZE, true, null);
|
|
|
|
|
|
|
+ ObjectResult objectResult = putObjectService.copyObject(objectProp, filename, fileMeta);
|
|
|
|
|
+
|
|
|
|
|
+ String objectId = objectResult.getObjectId();
|
|
|
|
|
+ String objectName1 = objectResult.getObjectName();
|
|
|
|
|
+ String host = ServletUtil.getHeader("host");
|
|
|
|
|
+ String url = String.format("//%s/%s", host, objectName1);
|
|
|
|
|
+ return new UploadedPart(objectId, url);
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- public UploadedPart getUploadedPart(String sha256sum) {
|
|
|
|
|
FileMultipart fileMultipart = filePartRepository.getFileMultipart(sha256sum);
|
|
FileMultipart fileMultipart = filePartRepository.getFileMultipart(sha256sum);
|
|
|
if (fileMultipart == null) {
|
|
if (fileMultipart == null) {
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
String contentId = fileMultipart.getContentId();
|
|
String contentId = fileMultipart.getContentId();
|
|
|
- List<FilePart> list = filePartRepository.getFileParts(contentId);
|
|
|
|
|
- UploadedPart uploadedPart = new UploadedPart();
|
|
|
|
|
- uploadedPart.setSkipUpload(false);
|
|
|
|
|
- uploadedPart.setNeedMerge(false);
|
|
|
|
|
- uploadedPart.setUrl("");
|
|
|
|
|
- uploadedPart.setUploaded(Collections.emptyList());
|
|
|
|
|
- return uploadedPart;
|
|
|
|
|
|
|
+ List<Integer> list = filePartRepository.getFileParts(contentId).stream()
|
|
|
|
|
+ .map(FilePart::getChunkNumber)
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+ return new UploadedPart(list);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -119,23 +100,27 @@ public class ObjectMultipartUploadService {
|
|
|
String suffix = StringUtil.getSuffix(objectName);
|
|
String suffix = StringUtil.getSuffix(objectName);
|
|
|
|
|
|
|
|
ObjectProp objectProp = objectNameService.getObjectProp(objectChannel, suffix);
|
|
ObjectProp objectProp = objectNameService.getObjectProp(objectChannel, suffix);
|
|
|
- putObjectService.copyObject(objectProp, filename, fileMeta);
|
|
|
|
|
|
|
+ ObjectResult objectResult = putObjectService.copyObject(objectProp, filename, fileMeta);
|
|
|
|
|
|
|
|
|
|
+ String objectId = objectResult.getObjectId();
|
|
|
|
|
+ String objectName1 = objectResult.getObjectName();
|
|
|
String host = ServletUtil.getHeader("host");
|
|
String host = ServletUtil.getHeader("host");
|
|
|
- String url = String.format("//%s/%s", host, objectProp);
|
|
|
|
|
- return new UploadFileRet(sha256sum, url);
|
|
|
|
|
|
|
+ String url = String.format("//%s/%s", host, objectName1);
|
|
|
|
|
+ return new UploadFileRet(objectId, url);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
List<FilePart> list = new ArrayList<>();
|
|
List<FilePart> list = new ArrayList<>();
|
|
|
- String contentId = filePartRepository.getFileMultipart(sha256sum).getContentId();
|
|
|
|
|
- if (contentId == null) {
|
|
|
|
|
|
|
+ String contentId;
|
|
|
|
|
+ FileMultipart fileMultipart = filePartRepository.getFileMultipart(sha256sum);
|
|
|
|
|
+ if (fileMultipart == null) {
|
|
|
contentId = UUID.randomUUID().toString().replace("-", "");
|
|
contentId = UUID.randomUUID().toString().replace("-", "");
|
|
|
String absolutePath = fileStoreService.genFilePath(contentId, totalSize, "");
|
|
String absolutePath = fileStoreService.genFilePath(contentId, totalSize, "");
|
|
|
fileStoreService.createSparseFile(absolutePath, totalSize);
|
|
fileStoreService.createSparseFile(absolutePath, totalSize);
|
|
|
|
|
|
|
|
- FileMultipart fileMultipart = new FileMultipart(contentId, uploadFilePart, absolutePath);
|
|
|
|
|
|
|
+ fileMultipart = new FileMultipart(contentId, uploadFilePart, absolutePath);
|
|
|
filePartRepository.saveFileParts(fileMultipart);
|
|
filePartRepository.saveFileParts(fileMultipart);
|
|
|
} else {
|
|
} else {
|
|
|
|
|
+ contentId = fileMultipart.getContentId();
|
|
|
list = filePartRepository.getFileParts(contentId);
|
|
list = filePartRepository.getFileParts(contentId);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -170,7 +155,7 @@ public class ObjectMultipartUploadService {
|
|
|
|
|
|
|
|
filePartRepository.updateSetUploaded(sha256sum);
|
|
filePartRepository.updateSetUploaded(sha256sum);
|
|
|
String host = ServletUtil.getHeader("host");
|
|
String host = ServletUtil.getHeader("host");
|
|
|
- String url = String.format("//%s/%s", host, objectProp);
|
|
|
|
|
|
|
+ String url = String.format("//%s/%s", host, objectProp.getObjectName());
|
|
|
return new UploadFileRet(sha256sum, url);
|
|
return new UploadFileRet(sha256sum, url);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|