mirror of
https://gitee.com/lxp135/minio-plus.git
synced 2025-12-07 01:18:22 +08:00
!1 feat(thumbnail-generator): The first visit to the thumbnail is to generate a thumbnail image #IA47NT
Merge pull request !1 from BaldHead/main
This commit is contained in:
commit
61b08e1240
@ -8,6 +8,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
|
||||
/**
|
||||
* MinioPlus配置类
|
||||
*
|
||||
* @author contact@liuxp.me
|
||||
* @since 2024/05/22
|
||||
*/
|
||||
@ -89,7 +90,11 @@ public class MinioPlusProperties {
|
||||
|
||||
/**
|
||||
* 是否开启缩略图。默认为true
|
||||
*
|
||||
* @since 2024-06-14 15:47:46
|
||||
* feature 缩略图懒生成
|
||||
*/
|
||||
@Deprecated
|
||||
private boolean enable = true;
|
||||
|
||||
/**
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package org.liuxp.minioplus.core.engine.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.lang.Pair;
|
||||
@ -54,7 +55,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
||||
|
||||
/**
|
||||
* 上传任务初始化
|
||||
*
|
||||
* <p>
|
||||
* 1.当前用户或其他用户上传过,且已完成,秒传,新增文件元数据
|
||||
* 2.当前用户上传过,未完成,断点续传
|
||||
* 3.其他用户上传过,未完成,断点续传,新增文件元数据
|
||||
@ -64,7 +65,6 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
||||
* @param fullFileName 文件名(含扩展名)
|
||||
* @param fileSize 文件长度
|
||||
* @param isPrivate 是否私有 false:否 true:是
|
||||
*
|
||||
* @return {@link FileCheckResultVo}
|
||||
*/
|
||||
@Override
|
||||
@ -242,7 +242,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
||||
// 分片数量
|
||||
saveDTO.setPartNumber(createUploadUrlRespBO.getPartCount());
|
||||
// 预览图 0:无 1:有
|
||||
saveDTO.setIsPreview(saveDTO.getStorageBucket().equals(StorageBucketEnums.IMAGE.getCode()) && properties.getThumbnail().isEnable());
|
||||
saveDTO.setIsPreview(Boolean.FALSE);
|
||||
// 是否私有 0:否 1:是
|
||||
saveDTO.setIsPrivate(isPrivate);
|
||||
// 创建人
|
||||
@ -416,11 +416,10 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
||||
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) {
|
||||
// 打印日志
|
||||
log.error(e.getMessage(), e);
|
||||
@ -429,25 +428,41 @@ 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());
|
||||
metadata.setIsPreview(Boolean.TRUE);
|
||||
FileMetadataInfoUpdateDTO fileMetadataInfoUpdateDTO = BeanUtil.copyProperties(metadata, FileMetadataInfoUpdateDTO.class);
|
||||
metadataRepository.update(fileMetadataInfoUpdateDTO);
|
||||
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;
|
||||
|
||||
|
||||
@ -522,6 +537,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
||||
/**
|
||||
* 根据用户取得文件元数据信息
|
||||
* 当userId匹配时直接返回,不匹配时检查是否存在公有元数据
|
||||
*
|
||||
* @param fileKey 文件KEY
|
||||
* @param userId 用户主键
|
||||
* @return 文件元数据信息
|
||||
@ -603,6 +619,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
||||
|
||||
/**
|
||||
* 断点续传-创建断点的URL
|
||||
*
|
||||
* @param fileMetadataVo 文件元数据信息
|
||||
* @return CreateUploadUrlRespBO 分片结果
|
||||
*/
|
||||
@ -665,6 +682,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
||||
|
||||
/**
|
||||
* 合并分片
|
||||
*
|
||||
* @param metadataInfo 文件元数据信息
|
||||
* @param partMd5List 分片集合
|
||||
* @return 合并结果
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user