diff --git a/minio-plus-common/src/main/java/org/liuxp/minioplus/common/config/MinioPlusProperties.java b/minio-plus-common/src/main/java/org/liuxp/minioplus/common/config/MinioPlusProperties.java
index f1cae63..b981af8 100644
--- a/minio-plus-common/src/main/java/org/liuxp/minioplus/common/config/MinioPlusProperties.java
+++ b/minio-plus-common/src/main/java/org/liuxp/minioplus/common/config/MinioPlusProperties.java
@@ -8,8 +8,9 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* MinioPlus配置类
+ *
* @author contact@liuxp.me
- * @since 2024/05/22
+ * @since 2024/05/22
*/
@Getter
@Setter
@@ -89,7 +90,11 @@ public class MinioPlusProperties {
/**
* 是否开启缩略图。默认为true
+ *
+ * @since 2024-06-14 15:47:46
+ * feature 缩略图懒生成
*/
+ @Deprecated
private boolean enable = true;
/**
diff --git a/minio-plus-core/src/main/java/org/liuxp/minioplus/core/engine/impl/StorageEngineServiceImpl.java b/minio-plus-core/src/main/java/org/liuxp/minioplus/core/engine/impl/StorageEngineServiceImpl.java
index 40dfb01..3051d53 100644
--- a/minio-plus-core/src/main/java/org/liuxp/minioplus/core/engine/impl/StorageEngineServiceImpl.java
+++ b/minio-plus-core/src/main/java/org/liuxp/minioplus/core/engine/impl/StorageEngineServiceImpl.java
@@ -54,21 +54,20 @@ public class StorageEngineServiceImpl implements StorageEngineService {
/**
* 上传任务初始化
- *
+ *
* 1.当前用户或其他用户上传过,且已完成,秒传,新增文件元数据
* 2.当前用户上传过,未完成,断点续传
* 3.其他用户上传过,未完成,断点续传,新增文件元数据
* 4.从未上传过,下发上传链接,新增文件元数据
*
- * @param fileMd5 文件md5
+ * @param fileMd5 文件md5
* @param fullFileName 文件名(含扩展名)
- * @param fileSize 文件长度
- * @param isPrivate 是否私有 false:否 true:是
- *
+ * @param fileSize 文件长度
+ * @param isPrivate 是否私有 false:否 true:是
* @return {@link FileCheckResultVo}
*/
@Override
- public FileCheckResultVo init(String fileMd5, String fullFileName, long fileSize, Boolean isPrivate,String userId) {
+ public FileCheckResultVo init(String fileMd5, String fullFileName, long fileSize, Boolean isPrivate, String userId) {
// 根据MD5查询文件是否已上传过
FileMetadataInfoDTO searchDTO = new FileMetadataInfoDTO();
@@ -78,10 +77,10 @@ public class StorageEngineServiceImpl implements StorageEngineService {
FileMetadataInfoSaveDTO saveDTO = new FileMetadataInfoSaveDTO();
CreateUploadUrlReqBO bo = new CreateUploadUrlReqBO();
- if(CollUtil.isNotEmpty(list)){
+ if (CollUtil.isNotEmpty(list)) {
// 1.当前用户或其他用户上传过,且已完成,秒传,新增文件元数据
for (FileMetadataInfoVo fileMetadataInfoVo : list) {
- if(fileMetadataInfoVo.getIsFinished()){
+ if (fileMetadataInfoVo.getIsFinished()) {
// 秒传
saveDTO.setFileKey(IdUtil.fastSimpleUUID()); // 文件KEY
saveDTO.setFileMd5(fileMd5); // 文件md5
@@ -109,13 +108,13 @@ public class StorageEngineServiceImpl implements StorageEngineService {
boolean isSelf = userUploaded.isPresent();
- if(!isSelf){
+ if (!isSelf) {
uploadingMetadata = list.stream()
.filter(FileMetadataInfoVo::getIsFinished)
.findAny()
.orElseGet(() -> list.stream()
.filter(item -> !item.getIsFinished()).findFirst().get());
- }else{
+ } else {
uploadingMetadata = userUploaded.get();
}
@@ -123,7 +122,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
bo.setIsSequel(Boolean.TRUE);
CreateUploadUrlRespBO respBO = this.breakResume(uploadingMetadata);
- if(!isSelf){
+ if (!isSelf) {
// 3.其他用户上传过,未完成,断点续传,新增文件元数据
// 插入自己的元数据
BeanUtils.copyProperties(uploadingMetadata, saveDTO);
@@ -134,9 +133,9 @@ public class StorageEngineServiceImpl implements StorageEngineService {
FileMetadataInfoVo metadataInfoVo = metadataRepository.save(saveDTO);
return this.buildResult(metadataInfoVo, respBO.getParts(), respBO.getPartCount(), Boolean.FALSE);
- }else{
+ } else {
// 2.当前用户上传过,未完成,断点续传
- if(CollUtil.isNotEmpty(respBO.getParts()) && !respBO.getUploadTaskId().equals(uploadingMetadata.getUploadTaskId())){
+ if (CollUtil.isNotEmpty(respBO.getParts()) && !respBO.getUploadTaskId().equals(uploadingMetadata.getUploadTaskId())) {
// 原uploadTaskId失效时,同时更新原记录
uploadingMetadata.setUploadTaskId(respBO.getUploadTaskId());
FileMetadataInfoUpdateDTO updateDTO = new FileMetadataInfoUpdateDTO();
@@ -148,7 +147,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
return this.buildResult(uploadingMetadata, respBO.getParts(), respBO.getPartCount(), Boolean.FALSE);
}
- }else{
+ } else {
// 4.从未上传过,下发上传链接,新增文件元数据
bo.setFileMd5(fileMd5);
@@ -157,7 +156,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
CreateUploadUrlRespBO createUploadUrlRespBO = this.createUploadUrl(bo);
- FileMetadataInfoVo metadataInfo = saveMetadataInfo(saveDTO, createUploadUrlRespBO, fileMd5, fullFileName, fileSize, isPrivate, userId);
+ FileMetadataInfoVo metadataInfo = saveMetadataInfo(saveDTO, createUploadUrlRespBO, fileMd5, fullFileName, fileSize, isPrivate, userId);
return this.buildResult(metadataInfo, createUploadUrlRespBO.getParts(), createUploadUrlRespBO.getPartCount(), Boolean.FALSE);
}
@@ -204,13 +203,13 @@ public class StorageEngineServiceImpl implements StorageEngineService {
/**
* 保存文件源信息
*
- * @param saveDTO 元数据保存实体类
- * @param createUploadUrlRespBO 上传链接参数
- * @param fileMd5 文件md5
- * @param fullFileName 文件名(含扩展名)
- * @param fileSize 文件长度
- * @param isPrivate 是否私有 false:否 true:是
- * @param userId 用户编号
+ * @param saveDTO 元数据保存实体类
+ * @param createUploadUrlRespBO 上传链接参数
+ * @param fileMd5 文件md5
+ * @param fullFileName 文件名(含扩展名)
+ * @param fileSize 文件长度
+ * @param isPrivate 是否私有 false:否 true:是
+ * @param userId 用户编号
* @return {@link FileMetadataInfoVo}
*/
private FileMetadataInfoVo saveMetadataInfo(FileMetadataInfoSaveDTO saveDTO, CreateUploadUrlRespBO createUploadUrlRespBO,
@@ -259,7 +258,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
* @return {@link Boolean}
*/
@Override
- public CompleteResultVo complete(String fileKey, List partMd5List,String userId) {
+ public CompleteResultVo complete(String fileKey, List partMd5List, String userId) {
CompleteResultVo completeResultVo = new CompleteResultVo();
@@ -271,24 +270,24 @@ public class StorageEngineServiceImpl implements StorageEngineService {
FileMetadataInfoVo metadata = metadataRepository.one(searchDto);
- if(metadata == null){
- log.error(fileKey+MinioPlusErrorCode.FILE_EXIST_FAILED.getMessage());
- throw new MinioPlusException(MinioPlusErrorCode.FILE_EXIST_FAILED.getCode(),fileKey+MinioPlusErrorCode.FILE_EXIST_FAILED.getMessage());
+ if (metadata == null) {
+ log.error(fileKey + MinioPlusErrorCode.FILE_EXIST_FAILED.getMessage());
+ throw new MinioPlusException(MinioPlusErrorCode.FILE_EXIST_FAILED.getCode(), fileKey + MinioPlusErrorCode.FILE_EXIST_FAILED.getMessage());
}
- if(Boolean.TRUE.equals(metadata.getIsFinished())){
+ if (Boolean.TRUE.equals(metadata.getIsFinished())) {
// 如果文件已上传完成,直接返回true,不进行合并
completeResultVo.setIsComplete(true);
return completeResultVo;
}
- if(metadata.getStorageBucket().equals(StorageBucketEnums.IMAGE.getCode())){
+ if (metadata.getStorageBucket().equals(StorageBucketEnums.IMAGE.getCode())) {
// 图片时,生成图片的上传链接
List partList = new ArrayList<>();
FileCheckResultVo.Part part = new FileCheckResultVo.Part();
part.setUploadId(metadata.getFileKey());
- part.setUrl("/storage/upload/image/"+metadata.getFileKey());
+ part.setUrl("/storage/upload/image/" + metadata.getFileKey());
part.setStartPosition(0L);
part.setEndPosition(metadata.getFileSize());
partList.add(part);
@@ -316,7 +315,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
searchDto.setFileMd5(metadata.getFileMd5());
searchDto.setIsFinished(false);
List others = metadataRepository.list(searchDto);
- if(CollUtil.isNotEmpty(others)){
+ if (CollUtil.isNotEmpty(others)) {
for (FileMetadataInfoVo other : others) {
updateDTO = new FileMetadataInfoUpdateDTO();
updateDTO.setId(other.getId());
@@ -325,8 +324,8 @@ public class StorageEngineServiceImpl implements StorageEngineService {
metadataRepository.update(updateDTO);
}
}
- }else{
- if(!metadata.getUploadTaskId().equals(completeResultVo.getUploadTaskId())){
+ } else {
+ if (!metadata.getUploadTaskId().equals(completeResultVo.getUploadTaskId())) {
FileMetadataInfoUpdateDTO updateDTO = new FileMetadataInfoUpdateDTO();
updateDTO.setId(metadata.getId());
updateDTO.setUploadTaskId(completeResultVo.getUploadTaskId());
@@ -354,7 +353,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
saveDto.setFileMimeType(metadata.getFileMimeType());
saveDto.setIsPreview(metadata.getIsPreview());
- Boolean isCreateFile = createFile(saveDto,file);
+ Boolean isCreateFile = createFile(saveDto, file);
FileMetadataInfoUpdateDTO updateDTO = new FileMetadataInfoUpdateDTO();
updateDTO.setId(metadata.getId());
@@ -364,8 +363,8 @@ public class StorageEngineServiceImpl implements StorageEngineService {
return isCreateFile;
- }catch(Exception e){
- log.error(MinioPlusErrorCode.FILE_UPLOAD_FAILED.getMessage(),e);
+ } catch (Exception e) {
+ log.error(MinioPlusErrorCode.FILE_UPLOAD_FAILED.getMessage(), e);
throw new MinioPlusException(MinioPlusErrorCode.FILE_UPLOAD_FAILED);
}
@@ -376,14 +375,14 @@ public class StorageEngineServiceImpl implements StorageEngineService {
FileMetadataInfoVo metadata = getFileMetadataInfo(fileKey, userId);
- try{
+ try {
// 文件权限校验,元数据为空或者当前登录用户不是文件所有者时抛出异常
this.authentication(metadata, fileKey, userId);
- return minioS3Client.getDownloadUrl(metadata.getFileName(),metadata.getFileMimeType(),metadata.getStorageBucket(),metadata.getStoragePath() + "/"+ metadata.getFileMd5());
- }catch(Exception e){
+ return minioS3Client.getDownloadUrl(metadata.getFileName(), metadata.getFileMimeType(), metadata.getStorageBucket(), metadata.getStoragePath() + "/" + metadata.getFileMd5());
+ } catch (Exception e) {
// 打印日志
- log.error(e.getMessage(),e);
+ log.error(e.getMessage(), e);
// 任何异常,统一返回给前端文件不存在
throw new MinioPlusException(MinioPlusErrorCode.FILE_EXIST_FAILED);
}
@@ -394,15 +393,15 @@ public class StorageEngineServiceImpl implements StorageEngineService {
FileMetadataInfoVo metadata = getFileMetadataInfo(fileKey, userId);
- try{
+ try {
// 文件权限校验,元数据为空或者当前登录用户不是文件所有者时抛出异常
this.authentication(metadata, fileKey, userId);
- return minioS3Client.getPreviewUrl(metadata.getFileMimeType(),metadata.getStorageBucket(),metadata.getStoragePath() + "/"+ metadata.getFileMd5());
+ return minioS3Client.getPreviewUrl(metadata.getFileMimeType(), metadata.getStorageBucket(), metadata.getStoragePath() + "/" + metadata.getFileMd5());
- }catch(Exception e){
+ } catch (Exception e) {
// 打印日志
- log.error(e.getMessage(),e);
+ log.error(e.getMessage(), e);
// 任何异常,统一返回给前端文件不存在
throw new MinioPlusException(MinioPlusErrorCode.FILE_EXIST_FAILED);
}
@@ -413,48 +412,60 @@ public class StorageEngineServiceImpl implements StorageEngineService {
FileMetadataInfoVo metadata = getFileMetadataInfo(fileKey, userId);
- try{
+ try {
// 文件权限校验,元数据为空或者当前登录用户不是文件所有者时抛出异常
this.authentication(metadata, fileKey, userId);
- // 判断是否存在缩略图,设置桶名称
- String bucketName = Boolean.TRUE.equals(metadata.getIsPreview()) ? StorageBucketEnums.IMAGE_PREVIEW.getCode() : metadata.getStorageBucket();
+ // 生成缩略图
+ String bucketName = generatePreviewImage(metadata);
// 创建图片预览地址
- return minioS3Client.getPreviewUrl(metadata.getFileMimeType(),bucketName,metadata.getStoragePath() + "/"+ metadata.getFileMd5());
-
- }catch(Exception e){
+ return minioS3Client.getPreviewUrl(metadata.getFileMimeType(), bucketName, metadata.getStoragePath() + "/" + metadata.getFileMd5());
+ } catch (Exception e) {
// 打印日志
- log.error(e.getMessage(),e);
+ log.error(e.getMessage(), e);
// 任何异常,统一返回给前端文件不存在
throw new MinioPlusException(MinioPlusErrorCode.FILE_EXIST_FAILED);
}
}
+ /**
+ * 文件元数据
+ *
+ * @param metadata 文件元数据
+ * @return 缩略图桶路径
+ * @author BaldHead
+ * @since 2024-06-14 14:44:52
+ */
+ private String generatePreviewImage(FileMetadataInfoVo metadata) {
+ try {
+ if (Boolean.FALSE.equals(metadata.getIsPreview())) {
+ // 获取原图的bytes
+ byte[] imageOriginBytes = minioS3Client.getObject(StorageBucketEnums.IMAGE.getCode(), metadata.getStoragePath() + "/" + metadata.getFileMd5());
+ // 压缩缩略图
+ ByteArrayOutputStream largeImage = CommonUtil.resizeImage(new ByteArrayInputStream(imageOriginBytes), properties.getThumbnail().getSize());
+ byte[] largeImageBytes = largeImage.toByteArray();
+ minioS3Client.putObject(StorageBucketEnums.IMAGE_PREVIEW.getCode(), CommonUtil.getObjectName(metadata.getFileMd5()), new ByteArrayInputStream(largeImageBytes), largeImageBytes.length, metadata.getFileMimeType());
+ return StorageBucketEnums.IMAGE_PREVIEW.getCode();
+ }
+ } catch (Exception e) {
+ // 打印日志
+ log.error(e.getMessage(), e);
+ // 任何异常,统一返回给前端文件不存在
+ throw new MinioPlusException(MinioPlusErrorCode.FILE_EXIST_FAILED);
+ }
+ return null;
+ }
+
@Override
public Boolean createFile(FileMetadataInfoSaveDTO saveDTO, byte[] fileBytes) {
-
// 写入文件
minioS3Client.putObject(saveDTO.getStorageBucket(), CommonUtil.getObjectName(saveDTO.getFileMd5()), new ByteArrayInputStream(fileBytes), saveDTO.getFileSize(), saveDTO.getFileMimeType());
-
- // 判断是否生成缩略图
- if(Boolean.TRUE.equals(saveDTO.getIsPreview())){
-
- try{
- ByteArrayOutputStream largeImage = CommonUtil.resizeImage(new ByteArrayInputStream(fileBytes), properties.getThumbnail().getSize());
- byte[] largeImageBytes = largeImage.toByteArray();
- minioS3Client.putObject(StorageBucketEnums.IMAGE_PREVIEW.getCode(), CommonUtil.getObjectName(saveDTO.getFileMd5()), new ByteArrayInputStream(largeImageBytes), largeImageBytes.length, saveDTO.getFileMimeType());
- }catch(Exception e){
- log.error(MinioPlusErrorCode.FILE_PREVIEW_WRITE_FAILED.getMessage(),e);
- throw new MinioPlusException(MinioPlusErrorCode.FILE_PREVIEW_WRITE_FAILED);
- }
- }
-
return true;
}
@Override
- public Pair read(String fileKey) {
+ public Pair read(String fileKey) {
// 查询文件元数据
FileMetadataInfoDTO fileMetadataInfo = new FileMetadataInfoDTO();
@@ -466,9 +477,9 @@ public class StorageEngineServiceImpl implements StorageEngineService {
}
// 读取流
- byte[] fileBytes = minioS3Client.getObject(fileMetadataInfoVo.getStorageBucket(), fileMetadataInfoVo.getStoragePath() + "/" + fileMetadataInfoVo.getFileMd5());
+ byte[] fileBytes = minioS3Client.getObject(fileMetadataInfoVo.getStorageBucket(), fileMetadataInfoVo.getStoragePath() + "/" + fileMetadataInfoVo.getFileMd5());
- return Pair.of(fileMetadataInfoVo,fileBytes);
+ return Pair.of(fileMetadataInfoVo, fileBytes);
}
@Override
@@ -501,7 +512,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
return true;
}
- private void remove(FileMetadataInfoVo metadata){
+ private void remove(FileMetadataInfoVo metadata) {
// 删除元数据信息
metadataRepository.remove(metadata.getId());
@@ -509,12 +520,12 @@ public class StorageEngineServiceImpl implements StorageEngineService {
fileMetadataInfo.setFileMd5(metadata.getFileMd5());
List metadataList = metadataRepository.list(fileMetadataInfo);
- if(CollUtil.isEmpty(metadataList)){
+ if (CollUtil.isEmpty(metadataList)) {
// 当不存在任何该MD5值的文件元数据时,删除物理文件
- minioS3Client.removeObject(metadata.getStorageBucket(), metadata.getStoragePath() + "/" + metadata.getFileMd5());
- if(Boolean.TRUE.equals(metadata.getIsPreview())){
+ minioS3Client.removeObject(metadata.getStorageBucket(), metadata.getStoragePath() + "/" + metadata.getFileMd5());
+ if (Boolean.TRUE.equals(metadata.getIsPreview())) {
// 当存在缩略图时,同步删除缩略图
- minioS3Client.removeObject(StorageBucketEnums.IMAGE_PREVIEW.getCode(), metadata.getStoragePath() + "/" + metadata.getFileMd5());
+ minioS3Client.removeObject(StorageBucketEnums.IMAGE_PREVIEW.getCode(), metadata.getStoragePath() + "/" + metadata.getFileMd5());
}
}
}
@@ -522,6 +533,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
/**
* 根据用户取得文件元数据信息
* 当userId匹配时直接返回,不匹配时检查是否存在公有元数据
+ *
* @param fileKey 文件KEY
* @param userId 用户主键
* @return 文件元数据信息
@@ -547,17 +559,17 @@ public class StorageEngineServiceImpl implements StorageEngineService {
* 文件为私有文件且当前登录用户不是文件所有者时抛出异常
*
* @param metadata 文件元数据
- * @param fileKey 文件key
- * @param userId 用户主键
+ * @param fileKey 文件key
+ * @param userId 用户主键
*/
- private void authentication(FileMetadataInfoVo metadata, String fileKey, String userId){
+ private void authentication(FileMetadataInfoVo metadata, String fileKey, String userId) {
if (null == metadata) {
throw new MinioPlusException(MinioPlusErrorCode.FILE_EXIST_FAILED.getCode(), fileKey + MinioPlusErrorCode.FILE_EXIST_FAILED.getMessage());
}
// 元数据信息存在,判断权限
- if(Boolean.TRUE.equals(metadata.getIsPrivate()) && !userId.equals(metadata.getCreateUser())){
- throw new MinioPlusException(MinioPlusErrorCode.FILE_PERMISSION_CHECK_FAILED.getCode(), fileKey + "用户"+userId+MinioPlusErrorCode.FILE_PERMISSION_CHECK_FAILED.getMessage());
+ if (Boolean.TRUE.equals(metadata.getIsPrivate()) && !userId.equals(metadata.getCreateUser())) {
+ throw new MinioPlusException(MinioPlusErrorCode.FILE_PERMISSION_CHECK_FAILED.getCode(), fileKey + "用户" + userId + MinioPlusErrorCode.FILE_PERMISSION_CHECK_FAILED.getMessage());
}
}
@@ -580,16 +592,16 @@ public class StorageEngineServiceImpl implements StorageEngineService {
*
* @param bucketName 桶名称
* @param objectName 对象名称(含路径)
- * @param uploadId 上传任务编号
- * @param fileSize 文件大小
- * @param start 开始位置
+ * @param uploadId 上传任务编号
+ * @param fileSize 文件大小
+ * @param start 开始位置
* @param partNumber 块号
* @return {@link FileCheckResultVo.Part}
*/
- private FileCheckResultVo.Part buildResultPart(String bucketName,String objectName,String uploadId, Long fileSize, long start, Integer partNumber) {
+ private FileCheckResultVo.Part buildResultPart(String bucketName, String objectName, String uploadId, Long fileSize, long start, Integer partNumber) {
// 计算起始位置
long end = Math.min(start + properties.getPart().getSize(), fileSize);
- String uploadUrl = minioS3Client.getUploadObjectUrl(bucketName, objectName, uploadId,String.valueOf(partNumber));
+ String uploadUrl = minioS3Client.getUploadObjectUrl(bucketName, objectName, uploadId, String.valueOf(partNumber));
FileCheckResultVo.Part part = new FileCheckResultVo.Part();
part.setUploadId(uploadId);
// 上传地址
@@ -603,6 +615,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
/**
* 断点续传-创建断点的URL
+ *
* @param fileMetadataVo 文件元数据信息
* @return CreateUploadUrlRespBO 分片结果
*/
@@ -644,7 +657,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
// 丢失的块号-断点续传时必传
bo.setMissPartNum(missingNumbers);
- if(missingNumbers.size() != chunkNum){
+ if (missingNumbers.size() != chunkNum) {
// 任务id,任务id可能会失效
bo.setUploadId(fileMetadataVo.getUploadTaskId());
}
@@ -665,8 +678,9 @@ public class StorageEngineServiceImpl implements StorageEngineService {
/**
* 合并分片
+ *
* @param metadataInfo 文件元数据信息
- * @param partMd5List 分片集合
+ * @param partMd5List 分片集合
* @return 合并结果
*/
public CompleteResultVo completeMultipartUpload(FileMetadataInfoVo metadataInfo, List partMd5List) {
@@ -676,12 +690,12 @@ public class StorageEngineServiceImpl implements StorageEngineService {
// 获取所有的分片信息
ListParts listParts = this.buildResultPart(metadataInfo);
- List missingNumbers =new ArrayList<>();
+ List missingNumbers = new ArrayList<>();
// 分块数量
Integer chunkNum = metadataInfo.getPartNumber();
- if(partMd5List==null || chunkNum != partMd5List.size()){
+ if (partMd5List == null || chunkNum != partMd5List.size()) {
throw new MinioPlusException(MinioPlusErrorCode.FILE_PART_NUM_CHECK_FAILED);
}
@@ -689,16 +703,16 @@ public class StorageEngineServiceImpl implements StorageEngineService {
for (int i = 1; i <= chunkNum; i++) {
boolean findPart = false;
for (ListParts.Part part : listParts.getPartList()) {
- if(part.getPartNumber() == i && CharSequenceUtil.equalsIgnoreCase(part.getEtag(), partMd5List.get(i - 1))){
+ if (part.getPartNumber() == i && CharSequenceUtil.equalsIgnoreCase(part.getEtag(), partMd5List.get(i - 1))) {
findPart = true;
}
}
- if(!findPart){
+ if (!findPart) {
missingNumbers.add(i);
}
}
- if(CollUtil.isNotEmpty(missingNumbers)){
+ if (CollUtil.isNotEmpty(missingNumbers)) {
CreateUploadUrlReqBO bo = new CreateUploadUrlReqBO();
// 文件md5
bo.setFileMd5(metadataInfo.getFileMd5());
@@ -710,7 +724,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
bo.setIsSequel(Boolean.TRUE);
// 丢失的块号-断点续传时必传
bo.setMissPartNum(missingNumbers);
- if(missingNumbers.size() != chunkNum){
+ if (missingNumbers.size() != chunkNum) {
// 任务id,任务id可能会失效
bo.setUploadId(metadataInfo.getUploadTaskId());
}
@@ -725,12 +739,12 @@ public class StorageEngineServiceImpl implements StorageEngineService {
completeResultVo.setIsComplete(false);
completeResultVo.setUploadTaskId(createUploadUrlRespBO.getUploadTaskId());
completeResultVo.setPartList(createUploadUrlRespBO.getParts());
- }else{
+ } else {
// 合并分块
boolean writeResponse = minioS3Client.completeMultipartUpload(metadataInfo.getStorageBucket()
- ,listParts.getObjectName()
- ,metadataInfo.getUploadTaskId()
- ,listParts.getPartList()
+ , listParts.getObjectName()
+ , metadataInfo.getUploadTaskId()
+ , listParts.getPartList()
);
completeResultVo.setIsComplete(writeResponse);
completeResultVo.setPartList(new ArrayList<>());
@@ -745,7 +759,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
* @param metadataInfo 文件元数据信息
* @return {@link ListParts} 分片任务信息
*/
- private ListParts buildResultPart(FileMetadataInfoVo metadataInfo){
+ private ListParts buildResultPart(FileMetadataInfoVo metadataInfo) {
String objectName = CommonUtil.getObjectName(metadataInfo.getFileMd5());
// 获取所有的分片信息
return minioS3Client.listParts(metadataInfo.getStorageBucket(), objectName, metadataInfo.getPartNumber(), metadataInfo.getUploadTaskId());
@@ -777,7 +791,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
// 开始位置
long start = (long) (bo.getMissPartNum().get(0) - 1) * properties.getPart().getSize();
for (int partNumber : bo.getMissPartNum()) {
- FileCheckResultVo.Part part = this.buildResultPart(bucketName,storagePath, uploadId, bo.getFileSize(), start, partNumber);
+ FileCheckResultVo.Part part = this.buildResultPart(bucketName, storagePath, uploadId, bo.getFileSize(), start, partNumber);
// 更改下一次的开始位置
start = start + properties.getPart().getSize();
partList.add(part);
@@ -803,7 +817,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
FileCheckResultVo.Part part = new FileCheckResultVo.Part();
// 图片上传时,直接使用fileKey作为uploadId
part.setUploadId(fileKey);
- part.setUrl("/storage/upload/image/"+fileKey);
+ part.setUrl("/storage/upload/image/" + fileKey);
part.setStartPosition(0L);
part.setEndPosition(bo.getFileSize());
partList.add(part);