删除原有图片上传逻辑,使用懒加载策略,在第一次访问预览图时生成。

This commit is contained in:
刘小平 2024-06-14 16:57:41 +08:00
parent 61b08e1240
commit 3d53e62b38
6 changed files with 10 additions and 120 deletions

View File

@ -37,14 +37,6 @@ public interface StorageService {
*/ */
CompleteResultVo complete(String fileKey, List<String> partMd5List,String userId); CompleteResultVo complete(String fileKey, List<String> partMd5List,String userId);
/**
* 上传图片
* @param fileKey 文件KEY
* @param file 文件
* @return 是否成功
*/
Boolean uploadImage(String fileKey, byte[] file);
/** /**
* 取得文件下载地址 * 取得文件下载地址
* *

View File

@ -21,7 +21,7 @@ public enum MinioPlusErrorCode {
FILE_SUFFIX_GET_FAILED(1004,"无法获取文件的拓展名"), FILE_SUFFIX_GET_FAILED(1004,"无法获取文件的拓展名"),
FILE_BYTES_FAILED(1005,"文件流不能为空"), FILE_BYTES_FAILED(1005,"文件流不能为空"),
FILE_UPLOAD_FAILED(1006,"文件上传失败"), FILE_UPLOAD_FAILED(1006,"文件上传失败"),
FILE_PREVIEW_WRITE_FAILED(1007,"缩略图写入失败"), FILE_PREVIEW_WRITE_FAILED(1007,"缩略图生成失败"),
/** /**
* MinIO 异常 * MinIO 异常

View File

@ -39,14 +39,6 @@ public interface StorageEngineService {
*/ */
CompleteResultVo complete(String fileKey, List<String> partMd5List,String userId); CompleteResultVo complete(String fileKey, List<String> partMd5List,String userId);
/**
* 上传图片
* @param fileKey 文件KEY
* @param file 文件
* @return 是否成功
*/
Boolean uploadImage(String fileKey, byte[] file);
/** /**
* 取得文件下载地址 * 取得文件下载地址
* *

View File

@ -282,24 +282,6 @@ public class StorageEngineServiceImpl implements StorageEngineService {
return completeResultVo; return completeResultVo;
} }
if (metadata.getStorageBucket().equals(StorageBucketEnums.IMAGE.getCode())) {
// 图片时生成图片的上传链接
List<FileCheckResultVo.Part> partList = new ArrayList<>();
FileCheckResultVo.Part part = new FileCheckResultVo.Part();
part.setUploadId(metadata.getFileKey());
part.setUrl("/storage/upload/image/" + metadata.getFileKey());
part.setStartPosition(0L);
part.setEndPosition(metadata.getFileSize());
partList.add(part);
completeResultVo.setIsComplete(false);
completeResultVo.setUploadTaskId(metadata.getUploadTaskId());
completeResultVo.setPartList(partList);
return completeResultVo;
}
completeResultVo = this.completeMultipartUpload(metadata, partMd5List); completeResultVo = this.completeMultipartUpload(metadata, partMd5List);
if (Boolean.TRUE.equals(completeResultVo.getIsComplete())) { if (Boolean.TRUE.equals(completeResultVo.getIsComplete())) {
@ -337,40 +319,6 @@ public class StorageEngineServiceImpl implements StorageEngineService {
return completeResultVo; return completeResultVo;
} }
@Override
public Boolean uploadImage(String fileKey, byte[] file) {
FileMetadataInfoDTO searchDto = new FileMetadataInfoDTO();
searchDto.setFileKey(fileKey);
FileMetadataInfoVo metadata = metadataRepository.one(searchDto);
try {
FileMetadataInfoSaveDTO saveDto = new FileMetadataInfoSaveDTO();
saveDto.setStorageBucket(metadata.getStorageBucket());
saveDto.setStoragePath(metadata.getStoragePath());
saveDto.setFileMd5(metadata.getFileMd5());
saveDto.setFileSize(metadata.getFileSize());
saveDto.setFileMimeType(metadata.getFileMimeType());
saveDto.setIsPreview(metadata.getIsPreview());
Boolean isCreateFile = createFile(saveDto, file);
FileMetadataInfoUpdateDTO updateDTO = new FileMetadataInfoUpdateDTO();
updateDTO.setId(metadata.getId());
updateDTO.setIsFinished(Boolean.TRUE);
updateDTO.setUpdateUser(metadata.getUpdateUser());
metadataRepository.update(updateDTO);
return isCreateFile;
} catch (Exception e) {
log.error(MinioPlusErrorCode.FILE_UPLOAD_FAILED.getMessage(), e);
throw new MinioPlusException(MinioPlusErrorCode.FILE_UPLOAD_FAILED);
}
}
@Override @Override
public String download(String fileKey, String userId) { public String download(String fileKey, String userId) {
@ -453,8 +401,8 @@ public class StorageEngineServiceImpl implements StorageEngineService {
} catch (Exception e) { } catch (Exception e) {
// 打印日志 // 打印日志
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
// 任何异常统一返回给前端文件不存在 // 缩略图生成失败
throw new MinioPlusException(MinioPlusErrorCode.FILE_EXIST_FAILED); throw new MinioPlusException(MinioPlusErrorCode.FILE_PREVIEW_WRITE_FAILED);
} }
return null; return null;
} }
@ -815,28 +763,15 @@ public class StorageEngineServiceImpl implements StorageEngineService {
bucketName = StorageBucketEnums.getBucketByFileSuffix(suffix); bucketName = StorageBucketEnums.getBucketByFileSuffix(suffix);
// 创建桶 // 创建桶
minioS3Client.makeBucket(bucketName); minioS3Client.makeBucket(bucketName);
// 如果是图片并开启了压缩,不需要分片,返回项目上的接口地址
if (bucketName.equals(StorageBucketEnums.IMAGE.getCode()) && properties.getThumbnail().isEnable()) {
FileCheckResultVo.Part part = new FileCheckResultVo.Part(); // 创建分片请求,获取uploadId
// 图片上传时直接使用fileKey作为uploadId uploadId = minioS3Client.createMultipartUpload(bucketName, CommonUtil.getObjectName(bo.getFileMd5()));
part.setUploadId(fileKey); long start = 0;
part.setUrl("/storage/upload/image/" + fileKey); for (Integer partNumber = 1; partNumber <= chunkNum; partNumber++) {
part.setStartPosition(0L); FileCheckResultVo.Part part = this.buildResultPart(bucketName, CommonUtil.getObjectName(bo.getFileMd5()), uploadId, bo.getFileSize(), start, partNumber);
part.setEndPosition(bo.getFileSize()); // 更改下一次的开始位置
start = start + properties.getPart().getSize();
partList.add(part); partList.add(part);
uploadId = fileKey;
} else {
// 创建分片请求,获取uploadId
uploadId = minioS3Client.createMultipartUpload(bucketName, CommonUtil.getObjectName(bo.getFileMd5()));
long start = 0;
for (Integer partNumber = 1; partNumber <= chunkNum; partNumber++) {
FileCheckResultVo.Part part = this.buildResultPart(bucketName, CommonUtil.getObjectName(bo.getFileMd5()), uploadId, bo.getFileSize(), start, partNumber);
// 更改下一次的开始位置
start = start + properties.getPart().getSize();
partList.add(part);
}
} }
} }
CreateUploadUrlRespBO respBO = new CreateUploadUrlRespBO(); CreateUploadUrlRespBO respBO = new CreateUploadUrlRespBO();

View File

@ -85,11 +85,6 @@ public class StorageServiceImpl implements StorageService {
return completeResultVo; return completeResultVo;
} }
@Override
public Boolean uploadImage(String fileKey, byte[] file) {
return storageEngineService.uploadImage(fileKey,file);
}
@Override @Override
public String download(String fileKey, String userId) { public String download(String fileKey, String userId) {
return storageEngineService.download(fileKey,userId); return storageEngineService.download(fileKey,userId);

View File

@ -82,30 +82,6 @@ public class StorageController {
return Response.success(completeResultVo); return Response.success(completeResultVo);
} }
/**
* 图片上传
* @param fileKey 文件KEY
* @param request 文件流
* @return 是否成功
*/
@ApiOperation(value = "图片上传")
@PutMapping("/upload/image/{fileKey}")
@ResponseBody
public Response<Boolean> uploadImage(@PathVariable String fileKey, HttpServletRequest request) {
Boolean isUpload = false;
InputStream inputStream = null;
try {
inputStream = request.getInputStream();
isUpload = storageService.uploadImage(fileKey, IoUtil.readBytes(inputStream));
} catch (IOException e) {
e.printStackTrace();
}finally {
IoUtil.close(inputStream);
}
return Response.success(isUpload);
}
/** /**
* 文件下载 * 文件下载
* @param fileKey 文件KEY * @param fileKey 文件KEY