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

View File

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

View File

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

View File

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

View File

@ -5,8 +5,8 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.liuxp.minioplus.api.StorageService;
import org.liuxp.minioplus.api.model.dto.FileCheckDTO;
import org.liuxp.minioplus.api.model.dto.FileCompleteDTO;
import org.liuxp.minioplus.extension.dto.FileCheckDTO;
import org.liuxp.minioplus.extension.dto.FileCompleteDTO;
import org.liuxp.minioplus.api.model.vo.CompleteResultVo;
import org.liuxp.minioplus.api.model.vo.FileCheckResultVo;
import org.liuxp.minioplus.extension.context.Response;
@ -55,7 +55,7 @@ public class StorageController {
// 取得当前登录用户信息
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);
}

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.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.ApiModelProperty;