调整StorageService接口定义,不再使用DTO。

This commit is contained in:
刘小平 2024-06-11 10:59:02 +08:00
parent 1d337307b0
commit 8ccebfc05b
8 changed files with 71 additions and 58 deletions

View File

@ -1,7 +1,6 @@
package org.liuxp.minioplus.api; package org.liuxp.minioplus.api;
import cn.hutool.core.lang.Pair; import cn.hutool.core.lang.Pair;
import org.liuxp.minioplus.api.model.dto.FileCheckDTO;
import org.liuxp.minioplus.api.model.dto.FileMetadataInfoDTO; import org.liuxp.minioplus.api.model.dto.FileMetadataInfoDTO;
import org.liuxp.minioplus.api.model.dto.FileSaveDTO; import org.liuxp.minioplus.api.model.dto.FileSaveDTO;
import org.liuxp.minioplus.api.model.vo.CompleteResultVo; import org.liuxp.minioplus.api.model.vo.CompleteResultVo;
@ -20,21 +19,21 @@ public interface StorageService {
/** /**
* 上传任务初始化 * 上传任务初始化
* * @param fileMd5 文件md5
* @param dto dto * @param fullFileName 文件名含扩展名
* @param fileSize 文件长度
* @param isPrivate 是否私有 false: true:
* @param userId 用户编号 * @param userId 用户编号
* @return {@link FileCheckResultVo} * @return {@link FileCheckResultVo}
*/ */
FileCheckResultVo init(FileCheckDTO dto, String userId); FileCheckResultVo init(String fileMd5, String fullFileName, long fileSize, Boolean isPrivate, String userId);
/** /**
* 合并已分块的文件 * 合并已分块的文件
*
* @param fileKey 文件关键 * @param fileKey 文件关键
* @param partMd5List 文件分块md5列表 * @param partMd5List 文件分块md5列表
* @param userId 用户编号 * @param userId 用户编号
*
* @return {@link CompleteResultVo} * @return {@link CompleteResultVo}
*/ */
CompleteResultVo complete(String fileKey, List<String> partMd5List,String userId); CompleteResultVo complete(String fileKey, List<String> partMd5List,String userId);
@ -52,7 +51,7 @@ public interface StorageService {
* *
* @param fileKey 文件KEY * @param fileKey 文件KEY
* @param userId 用户编号 * @param userId 用户编号
* @return 地址 * @return 文件下载地址
*/ */
String download(String fileKey, String userId); String download(String fileKey, String userId);
@ -61,7 +60,7 @@ public interface StorageService {
* *
* @param fileKey 文件KEY * @param fileKey 文件KEY
* @param userId 用户编号 * @param userId 用户编号
* @return 地址 * @return 原图地址
*/ */
String image(String fileKey, String userId); String image(String fileKey, String userId);
@ -70,7 +69,7 @@ public interface StorageService {
* *
* @param fileKey 文件KEY * @param fileKey 文件KEY
* @param userId 用户编号 * @param userId 用户编号
* @return 地址 * @return 缩略图地址
*/ */
String preview(String fileKey, String userId); String preview(String fileKey, String userId);

View File

@ -9,7 +9,7 @@ import java.util.List;
* 创建上传url * 创建上传url
* *
* @author contact@liuxp.me * @author contact@liuxp.me
* @date 2023/6/29 * @since 2023/6/29
*/ */
@Getter @Getter
@Setter @Setter

View File

@ -1,7 +1,6 @@
package org.liuxp.minioplus.core.engine; package org.liuxp.minioplus.core.engine;
import cn.hutool.core.lang.Pair; import cn.hutool.core.lang.Pair;
import org.liuxp.minioplus.api.model.dto.FileCheckDTO;
import org.liuxp.minioplus.api.model.dto.FileMetadataInfoSaveDTO; import org.liuxp.minioplus.api.model.dto.FileMetadataInfoSaveDTO;
import org.liuxp.minioplus.api.model.vo.CompleteResultVo; import org.liuxp.minioplus.api.model.vo.CompleteResultVo;
import org.liuxp.minioplus.api.model.vo.FileCheckResultVo; import org.liuxp.minioplus.api.model.vo.FileCheckResultVo;
@ -19,12 +18,14 @@ public interface StorageEngineService {
/** /**
* 上传任务初始化 * 上传任务初始化
* * @param fileMd5 文件md5
* @param dto dto * @param fullFileName 文件名含扩展名
* @param fileSize 文件长度
* @param isPrivate 是否私有 false: true:
* @param userId 用户编号 * @param userId 用户编号
* @return {@link FileCheckResultVo} * @return {@link FileCheckResultVo}
*/ */
FileCheckResultVo init(FileCheckDTO dto,String userId); FileCheckResultVo init(String fileMd5, String fullFileName, long fileSize, Boolean isPrivate,String userId);
/** /**

View File

@ -6,6 +6,14 @@ import cn.hutool.core.lang.Pair;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.liuxp.minioplus.api.model.bo.CreateUploadUrlReqBO;
import org.liuxp.minioplus.api.model.bo.CreateUploadUrlRespBO;
import org.liuxp.minioplus.api.model.dto.FileMetadataInfoDTO;
import org.liuxp.minioplus.api.model.dto.FileMetadataInfoSaveDTO;
import org.liuxp.minioplus.api.model.dto.FileMetadataInfoUpdateDTO;
import org.liuxp.minioplus.api.model.vo.CompleteResultVo;
import org.liuxp.minioplus.api.model.vo.FileCheckResultVo;
import org.liuxp.minioplus.api.model.vo.FileMetadataInfoVo;
import org.liuxp.minioplus.common.config.MinioPlusProperties; import org.liuxp.minioplus.common.config.MinioPlusProperties;
import org.liuxp.minioplus.common.enums.MinioPlusErrorCode; import org.liuxp.minioplus.common.enums.MinioPlusErrorCode;
import org.liuxp.minioplus.common.enums.StorageBucketEnums; import org.liuxp.minioplus.common.enums.StorageBucketEnums;
@ -13,15 +21,6 @@ import org.liuxp.minioplus.common.exception.MinioPlusException;
import org.liuxp.minioplus.core.common.utils.CommonUtil; import org.liuxp.minioplus.core.common.utils.CommonUtil;
import org.liuxp.minioplus.core.engine.StorageEngineService; import org.liuxp.minioplus.core.engine.StorageEngineService;
import org.liuxp.minioplus.core.repository.MetadataRepository; import org.liuxp.minioplus.core.repository.MetadataRepository;
import org.liuxp.minioplus.api.model.bo.CreateUploadUrlReqBO;
import org.liuxp.minioplus.api.model.bo.CreateUploadUrlRespBO;
import org.liuxp.minioplus.api.model.dto.FileCheckDTO;
import org.liuxp.minioplus.api.model.dto.FileMetadataInfoDTO;
import org.liuxp.minioplus.api.model.dto.FileMetadataInfoSaveDTO;
import org.liuxp.minioplus.api.model.dto.FileMetadataInfoUpdateDTO;
import org.liuxp.minioplus.api.model.vo.CompleteResultVo;
import org.liuxp.minioplus.api.model.vo.FileCheckResultVo;
import org.liuxp.minioplus.api.model.vo.FileMetadataInfoVo;
import org.liuxp.minioplus.s3.def.ListParts; import org.liuxp.minioplus.s3.def.ListParts;
import org.liuxp.minioplus.s3.def.MinioS3Client; import org.liuxp.minioplus.s3.def.MinioS3Client;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
@ -61,15 +60,19 @@ public class StorageEngineServiceImpl implements StorageEngineService {
* 3.其他用户上传过未完成断点续传新增文件元数据 * 3.其他用户上传过未完成断点续传新增文件元数据
* 4.从未上传过下发上传链接新增文件元数据 * 4.从未上传过下发上传链接新增文件元数据
* *
* @param dto 文件预检查入参DTO * @param fileMd5 文件md5
* @param fullFileName 文件名含扩展名
* @param fileSize 文件长度
* @param isPrivate 是否私有 false: true:
*
* @return {@link FileCheckResultVo} * @return {@link FileCheckResultVo}
*/ */
@Override @Override
public FileCheckResultVo init(FileCheckDTO dto,String userId) { public FileCheckResultVo init(String fileMd5, String fullFileName, long fileSize, Boolean isPrivate,String userId) {
// 根据MD5查询文件是否已上传过 // 根据MD5查询文件是否已上传过
FileMetadataInfoDTO searchDTO = new FileMetadataInfoDTO(); FileMetadataInfoDTO searchDTO = new FileMetadataInfoDTO();
searchDTO.setFileMd5(dto.getFileMd5()); searchDTO.setFileMd5(fileMd5);
List<FileMetadataInfoVo> list = metadataRepository.list(searchDTO); List<FileMetadataInfoVo> list = metadataRepository.list(searchDTO);
FileMetadataInfoSaveDTO saveDTO = new FileMetadataInfoSaveDTO(); FileMetadataInfoSaveDTO saveDTO = new FileMetadataInfoSaveDTO();
@ -81,8 +84,8 @@ public class StorageEngineServiceImpl implements StorageEngineService {
if(fileMetadataInfoVo.getIsFinished()){ if(fileMetadataInfoVo.getIsFinished()){
// 秒传 // 秒传
saveDTO.setFileKey(IdUtil.fastSimpleUUID()); // 文件KEY saveDTO.setFileKey(IdUtil.fastSimpleUUID()); // 文件KEY
saveDTO.setFileMd5(dto.getFileMd5()); // 文件md5 saveDTO.setFileMd5(fileMd5); // 文件md5
saveDTO.setFileName(dto.getFullFileName()); // 文件名 saveDTO.setFileName(fullFileName); // 文件名
saveDTO.setFileMimeType(fileMetadataInfoVo.getFileMimeType()); // MIME类型 saveDTO.setFileMimeType(fileMetadataInfoVo.getFileMimeType()); // MIME类型
saveDTO.setFileSuffix(fileMetadataInfoVo.getFileSuffix()); // 文件后缀 saveDTO.setFileSuffix(fileMetadataInfoVo.getFileSuffix()); // 文件后缀
saveDTO.setFileSize(fileMetadataInfoVo.getFileSize()); // 文件长度 saveDTO.setFileSize(fileMetadataInfoVo.getFileSize()); // 文件长度
@ -90,7 +93,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
saveDTO.setStoragePath(fileMetadataInfoVo.getStoragePath()); // 存储桶路径 saveDTO.setStoragePath(fileMetadataInfoVo.getStoragePath()); // 存储桶路径
saveDTO.setIsFinished(fileMetadataInfoVo.getIsFinished()); // 状态 0:未完成 1:已完成 saveDTO.setIsFinished(fileMetadataInfoVo.getIsFinished()); // 状态 0:未完成 1:已完成
saveDTO.setIsPreview(fileMetadataInfoVo.getIsPreview()); // 预览图 0: 1: saveDTO.setIsPreview(fileMetadataInfoVo.getIsPreview()); // 预览图 0: 1:
saveDTO.setIsPrivate(dto.getIsPrivate()); // 是否私有 0: 1: saveDTO.setIsPrivate(isPrivate); // 是否私有 0: 1:
saveDTO.setCreateUser(userId); // 创建人 saveDTO.setCreateUser(userId); // 创建人
saveDTO.setUpdateUser(userId); // 修改人 saveDTO.setUpdateUser(userId); // 修改人
@ -124,9 +127,9 @@ public class StorageEngineServiceImpl implements StorageEngineService {
// 3.其他用户上传过未完成断点续传新增文件元数据 // 3.其他用户上传过未完成断点续传新增文件元数据
// 插入自己的元数据 // 插入自己的元数据
BeanUtils.copyProperties(uploadingMetadata, saveDTO); BeanUtils.copyProperties(uploadingMetadata, saveDTO);
saveDTO.setFileName(dto.getFullFileName()); saveDTO.setFileName(fullFileName);
saveDTO.setCreateUser(userId); saveDTO.setCreateUser(userId);
saveDTO.setIsPrivate(dto.getIsPrivate()); saveDTO.setIsPrivate(isPrivate);
saveDTO.setUploadTaskId(respBO.getUploadTaskId()); saveDTO.setUploadTaskId(respBO.getUploadTaskId());
FileMetadataInfoVo metadataInfoVo = metadataRepository.save(saveDTO); FileMetadataInfoVo metadataInfoVo = metadataRepository.save(saveDTO);
@ -147,10 +150,14 @@ public class StorageEngineServiceImpl implements StorageEngineService {
} }
}else{ }else{
// 4.从未上传过下发上传链接新增文件元数据 // 4.从未上传过下发上传链接新增文件元数据
BeanUtils.copyProperties(dto, bo);
bo.setFileMd5(fileMd5);
bo.setFileSize(fileSize);
bo.setFullFileName(fullFileName);
CreateUploadUrlRespBO createUploadUrlRespBO = this.createUploadUrl(bo); CreateUploadUrlRespBO createUploadUrlRespBO = this.createUploadUrl(bo);
FileMetadataInfoVo metadataInfo = saveMetadataInfo(saveDTO, createUploadUrlRespBO, dto, userId); FileMetadataInfoVo metadataInfo = saveMetadataInfo(saveDTO, createUploadUrlRespBO, fileMd5, fullFileName, fileSize, isPrivate, userId);
return this.buildResult(metadataInfo, createUploadUrlRespBO.getParts(), createUploadUrlRespBO.getPartCount(), Boolean.FALSE); return this.buildResult(metadataInfo, createUploadUrlRespBO.getParts(), createUploadUrlRespBO.getPartCount(), Boolean.FALSE);
} }
@ -197,28 +204,31 @@ public class StorageEngineServiceImpl implements StorageEngineService {
/** /**
* 保存文件源信息 * 保存文件源信息
* *
* @param saveDTO 元数据保存实体类 * @param saveDTO 元数据保存实体类
* @param createUploadUrlRespBO 上传链接参数 * @param createUploadUrlRespBO 上传链接参数
* @param dto 文件检测参数 * @param fileMd5 文件md5
* @param userId 用户 * @param fullFileName 文件名含扩展名
* @param fileSize 文件长度
* @param isPrivate 是否私有 false: true:
* @param userId 用户编号
* @return {@link FileMetadataInfoVo} * @return {@link FileMetadataInfoVo}
*/ */
private FileMetadataInfoVo saveMetadataInfo(FileMetadataInfoSaveDTO saveDTO, CreateUploadUrlRespBO createUploadUrlRespBO, private FileMetadataInfoVo saveMetadataInfo(FileMetadataInfoSaveDTO saveDTO, CreateUploadUrlRespBO createUploadUrlRespBO,
FileCheckDTO dto, String userId) { String fileMd5, String fullFileName, long fileSize, boolean isPrivate, String userId) {
// 保存文件元数据 // 保存文件元数据
String suffix = FileUtil.getSuffix(dto.getFullFileName()); String suffix = FileUtil.getSuffix(fullFileName);
// 文件KEY // 文件KEY
saveDTO.setFileKey(createUploadUrlRespBO.getFileKey()); saveDTO.setFileKey(createUploadUrlRespBO.getFileKey());
// 文件md5 // 文件md5
saveDTO.setFileMd5(dto.getFileMd5()); saveDTO.setFileMd5(fileMd5);
// 文件名 // 文件名
saveDTO.setFileName(dto.getFullFileName()); saveDTO.setFileName(fullFileName);
// MIME类型 // MIME类型
saveDTO.setFileMimeType(FileUtil.getMimeType(dto.getFullFileName())); saveDTO.setFileMimeType(FileUtil.getMimeType(fullFileName));
// 文件后缀 // 文件后缀
saveDTO.setFileSuffix(suffix); saveDTO.setFileSuffix(suffix);
// 文件长度 // 文件长度
saveDTO.setFileSize(dto.getFileSize()); saveDTO.setFileSize(fileSize);
// 存储桶 // 存储桶
saveDTO.setStorageBucket(createUploadUrlRespBO.getBucketName()); saveDTO.setStorageBucket(createUploadUrlRespBO.getBucketName());
// 存储路径 // 存储路径
@ -234,7 +244,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
// 预览图 0: 1: // 预览图 0: 1:
saveDTO.setIsPreview(saveDTO.getStorageBucket().equals(StorageBucketEnums.IMAGE.getCode()) && properties.getThumbnail().isEnable()); saveDTO.setIsPreview(saveDTO.getStorageBucket().equals(StorageBucketEnums.IMAGE.getCode()) && properties.getThumbnail().isEnable());
// 是否私有 0: 1: // 是否私有 0: 1:
saveDTO.setIsPrivate(dto.getIsPrivate()); saveDTO.setIsPrivate(isPrivate);
// 创建人 // 创建人
saveDTO.setCreateUser(userId); saveDTO.setCreateUser(userId);
// 修改人 // 修改人

View File

@ -9,22 +9,21 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import org.liuxp.minioplus.api.model.dto.FileCheckDTO; import org.liuxp.minioplus.api.StorageService;
import org.liuxp.minioplus.api.model.vo.CompleteResultVo;
import org.liuxp.minioplus.api.model.vo.FileCheckResultVo;
import org.liuxp.minioplus.common.config.MinioPlusProperties;
import org.liuxp.minioplus.api.model.dto.FileMetadataInfoDTO; import org.liuxp.minioplus.api.model.dto.FileMetadataInfoDTO;
import org.liuxp.minioplus.api.model.dto.FileMetadataInfoSaveDTO; import org.liuxp.minioplus.api.model.dto.FileMetadataInfoSaveDTO;
import org.liuxp.minioplus.api.model.dto.FileSaveDTO; import org.liuxp.minioplus.api.model.dto.FileSaveDTO;
import org.liuxp.minioplus.api.model.vo.CompleteResultVo;
import org.liuxp.minioplus.api.model.vo.FileCheckResultVo;
import org.liuxp.minioplus.api.model.vo.FileMetadataInfoVo;
import org.liuxp.minioplus.common.config.MinioPlusProperties;
import org.liuxp.minioplus.common.enums.MinioPlusErrorCode; import org.liuxp.minioplus.common.enums.MinioPlusErrorCode;
import org.liuxp.minioplus.common.enums.StorageBucketEnums; import org.liuxp.minioplus.common.enums.StorageBucketEnums;
import org.liuxp.minioplus.common.exception.MinioPlusException; import org.liuxp.minioplus.common.exception.MinioPlusException;
import org.liuxp.minioplus.core.common.utils.ContentTypeUtil;
import org.liuxp.minioplus.core.common.utils.CommonUtil; import org.liuxp.minioplus.core.common.utils.CommonUtil;
import org.liuxp.minioplus.api.model.vo.FileMetadataInfoVo; import org.liuxp.minioplus.core.common.utils.ContentTypeUtil;
import org.liuxp.minioplus.core.engine.StorageEngineService; import org.liuxp.minioplus.core.engine.StorageEngineService;
import org.liuxp.minioplus.core.repository.MetadataRepository; import org.liuxp.minioplus.core.repository.MetadataRepository;
import org.liuxp.minioplus.api.StorageService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -58,8 +57,12 @@ public class StorageServiceImpl implements StorageService {
MinioPlusProperties properties; MinioPlusProperties properties;
@Override @Override
public FileCheckResultVo init(FileCheckDTO dto, String userId) { public FileCheckResultVo init(String fileMd5, String fullFileName, long fileSize, Boolean isPrivate, String userId) {
FileCheckResultVo resultVo = storageEngineService.init(dto,userId);
// isPrivate 为空时设置为 false
isPrivate = isPrivate!=null && isPrivate ;
FileCheckResultVo resultVo = storageEngineService.init(fileMd5,fullFileName,fileSize,isPrivate,userId);
if(resultVo!=null){ if(resultVo!=null){
for (FileCheckResultVo.Part part : resultVo.getPartList()) { for (FileCheckResultVo.Part part : resultVo.getPartList()) {

View File

@ -5,8 +5,8 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.liuxp.minioplus.api.StorageService; import org.liuxp.minioplus.api.StorageService;
import org.liuxp.minioplus.api.model.dto.FileCheckDTO; import org.liuxp.minioplus.extension.dto.FileCheckDTO;
import org.liuxp.minioplus.api.model.dto.FileCompleteDTO; import org.liuxp.minioplus.extension.dto.FileCompleteDTO;
import org.liuxp.minioplus.api.model.vo.CompleteResultVo; import org.liuxp.minioplus.api.model.vo.CompleteResultVo;
import org.liuxp.minioplus.api.model.vo.FileCheckResultVo; import org.liuxp.minioplus.api.model.vo.FileCheckResultVo;
import org.liuxp.minioplus.extension.context.Response; import org.liuxp.minioplus.extension.context.Response;
@ -55,7 +55,7 @@ public class StorageController {
// 取得当前登录用户信息 // 取得当前登录用户信息
String userId = "mockUser"; String userId = "mockUser";
FileCheckResultVo resultVo = storageService.init(fileCheckDTO,userId); FileCheckResultVo resultVo = storageService.init(fileCheckDTO.getFileMd5(),fileCheckDTO.getFullFileName(),fileCheckDTO.getFileSize(),fileCheckDTO.getIsPrivate(),userId);
return Response.success(resultVo); return Response.success(resultVo);
} }

View File

@ -1,4 +1,4 @@
package org.liuxp.minioplus.api.model.dto; package org.liuxp.minioplus.extension.dto;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;

View File

@ -1,4 +1,4 @@
package org.liuxp.minioplus.api.model.dto; package org.liuxp.minioplus.extension.dto;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;