mirror of
https://gitee.com/lxp135/minio-plus.git
synced 2025-12-06 17:08:26 +08:00
feat(thumbnail-generator): The first visit to the thumbnail is to generate a thumbnail image
This commit is contained in:
parent
f743c1f240
commit
83b528a0c2
@ -8,6 +8,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* MinioPlus配置类
|
* MinioPlus配置类
|
||||||
|
*
|
||||||
* @author contact@liuxp.me
|
* @author contact@liuxp.me
|
||||||
* @since 2024/05/22
|
* @since 2024/05/22
|
||||||
*/
|
*/
|
||||||
@ -89,7 +90,11 @@ public class MinioPlusProperties {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否开启缩略图。默认为true
|
* 是否开启缩略图。默认为true
|
||||||
|
*
|
||||||
|
* @since 2024-06-14 15:47:46
|
||||||
|
* feature 缩略图懒生成
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
private boolean enable = true;
|
private boolean enable = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -54,7 +54,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 上传任务初始化
|
* 上传任务初始化
|
||||||
*
|
* <p>
|
||||||
* 1.当前用户或其他用户上传过,且已完成,秒传,新增文件元数据
|
* 1.当前用户或其他用户上传过,且已完成,秒传,新增文件元数据
|
||||||
* 2.当前用户上传过,未完成,断点续传
|
* 2.当前用户上传过,未完成,断点续传
|
||||||
* 3.其他用户上传过,未完成,断点续传,新增文件元数据
|
* 3.其他用户上传过,未完成,断点续传,新增文件元数据
|
||||||
@ -64,7 +64,6 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
|||||||
* @param fullFileName 文件名(含扩展名)
|
* @param fullFileName 文件名(含扩展名)
|
||||||
* @param fileSize 文件长度
|
* @param fileSize 文件长度
|
||||||
* @param isPrivate 是否私有 false:否 true:是
|
* @param isPrivate 是否私有 false:否 true:是
|
||||||
*
|
|
||||||
* @return {@link FileCheckResultVo}
|
* @return {@link FileCheckResultVo}
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@ -416,11 +415,10 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
|||||||
try {
|
try {
|
||||||
// 文件权限校验,元数据为空或者当前登录用户不是文件所有者时抛出异常
|
// 文件权限校验,元数据为空或者当前登录用户不是文件所有者时抛出异常
|
||||||
this.authentication(metadata, fileKey, userId);
|
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());
|
return minioS3Client.getPreviewUrl(metadata.getFileMimeType(), bucketName, metadata.getStoragePath() + "/" + metadata.getFileMd5());
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 打印日志
|
// 打印日志
|
||||||
log.error(e.getMessage(), e);
|
log.error(e.getMessage(), e);
|
||||||
@ -429,25 +427,38 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件元数据
|
||||||
|
*
|
||||||
|
* @param metadata 文件元数据
|
||||||
|
* @return 缩略图桶路径
|
||||||
|
* @author <a href="mailto:tianxiang.deng@foxmail.com">BaldHead</a>
|
||||||
|
* @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
|
@Override
|
||||||
public Boolean createFile(FileMetadataInfoSaveDTO saveDTO, byte[] fileBytes) {
|
public Boolean createFile(FileMetadataInfoSaveDTO saveDTO, byte[] fileBytes) {
|
||||||
|
|
||||||
// 写入文件
|
// 写入文件
|
||||||
minioS3Client.putObject(saveDTO.getStorageBucket(), CommonUtil.getObjectName(saveDTO.getFileMd5()), new ByteArrayInputStream(fileBytes), saveDTO.getFileSize(), saveDTO.getFileMimeType());
|
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;
|
return true;
|
||||||
|
|
||||||
|
|
||||||
@ -522,6 +533,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
|||||||
/**
|
/**
|
||||||
* 根据用户取得文件元数据信息
|
* 根据用户取得文件元数据信息
|
||||||
* 当userId匹配时直接返回,不匹配时检查是否存在公有元数据
|
* 当userId匹配时直接返回,不匹配时检查是否存在公有元数据
|
||||||
|
*
|
||||||
* @param fileKey 文件KEY
|
* @param fileKey 文件KEY
|
||||||
* @param userId 用户主键
|
* @param userId 用户主键
|
||||||
* @return 文件元数据信息
|
* @return 文件元数据信息
|
||||||
@ -603,6 +615,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 断点续传-创建断点的URL
|
* 断点续传-创建断点的URL
|
||||||
|
*
|
||||||
* @param fileMetadataVo 文件元数据信息
|
* @param fileMetadataVo 文件元数据信息
|
||||||
* @return CreateUploadUrlRespBO 分片结果
|
* @return CreateUploadUrlRespBO 分片结果
|
||||||
*/
|
*/
|
||||||
@ -665,6 +678,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 合并分片
|
* 合并分片
|
||||||
|
*
|
||||||
* @param metadataInfo 文件元数据信息
|
* @param metadataInfo 文件元数据信息
|
||||||
* @param partMd5List 分片集合
|
* @param partMd5List 分片集合
|
||||||
* @return 合并结果
|
* @return 合并结果
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user