mirror of
https://gitee.com/lxp135/minio-plus.git
synced 2025-12-06 08:58:25 +08:00
新特性:支持桶名前缀配置。
This commit is contained in:
parent
ece06e9f0b
commit
a9ba3f6556
@ -40,6 +40,13 @@ public class MinioPlusProperties {
|
||||
*/
|
||||
private String browserUrl;
|
||||
|
||||
/**
|
||||
* 桶名前缀,默认为空。如果多个SDK连接同一个minio后端服务,可以配置不同的前缀来区分。
|
||||
* 可选参数,特殊字符不支持,需符合S3存储路径的命名规则
|
||||
* 具体规则参考 https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html
|
||||
*/
|
||||
private String bucketPrefix = "";
|
||||
|
||||
/**
|
||||
* 上传预签名URL有效期,单位为分钟
|
||||
* 可选参数,默认值为60分钟
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package org.liuxp.minioplus.common.enums;
|
||||
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
|
||||
import java.util.Arrays;
|
||||
@ -93,18 +94,40 @@ public enum StorageBucketEnums {
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据扩展名取得桶编码
|
||||
* 根据扩展名取得桶名
|
||||
* @param suffix 扩展名
|
||||
* @return 桶编码
|
||||
* @param bucketPrefix 桶名前缀
|
||||
* @return 桶名
|
||||
*/
|
||||
public static String getBucketByFileSuffix(String suffix) {
|
||||
public static String getBucketByFileSuffix(String suffix,String bucketPrefix) {
|
||||
|
||||
return Arrays.stream(StorageBucketEnums.values())
|
||||
String bucketName = Arrays.stream(StorageBucketEnums.values())
|
||||
.filter(item -> ArrayUtil.contains(item.types, suffix))
|
||||
.findFirst()
|
||||
.orElse(StorageBucketEnums.OTHER)
|
||||
.code;
|
||||
|
||||
if (CharSequenceUtil.isNotBlank(bucketPrefix)) {
|
||||
bucketName = bucketPrefix + "-" + bucketName;
|
||||
}
|
||||
|
||||
return bucketName;
|
||||
}
|
||||
|
||||
/**
|
||||
* 取得预览图桶名
|
||||
* @param bucketPrefix 桶名前缀
|
||||
* @return 桶名
|
||||
*/
|
||||
public static String getPreviewBucket(String bucketPrefix) {
|
||||
|
||||
String bucketName = StorageBucketEnums.IMAGE_PREVIEW.getCode();
|
||||
|
||||
if (CharSequenceUtil.isNotBlank(bucketPrefix)) {
|
||||
bucketName = bucketPrefix + "-" + bucketName;
|
||||
}
|
||||
|
||||
return bucketName;
|
||||
}
|
||||
|
||||
}
|
||||
@ -375,15 +375,17 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
||||
// 文件权限校验,元数据为空或者当前登录用户不是文件所有者时抛出异常
|
||||
this.authentication(metadata, fileKey, userId);
|
||||
|
||||
if (!StorageBucketEnums.IMAGE.getCode().equals(metadata.getStorageBucket())) {
|
||||
// 不是图片时,返回文件类型
|
||||
// 获取存储桶值,并检查是否为null或不包含IMAGE的Code
|
||||
String storageBucket = metadata.getStorageBucket();
|
||||
if (storageBucket == null || !storageBucket.contains(StorageBucketEnums.IMAGE.getCode())) {
|
||||
// 当存储桶为空或不包含IMAGE的Code时,返回文件后缀
|
||||
return metadata.getFileSuffix();
|
||||
}
|
||||
|
||||
// 生成缩略图
|
||||
generatePreviewImage(metadata);
|
||||
// 创建图片预览地址
|
||||
return minioS3Client.getPreviewUrl(metadata.getFileMimeType(), StorageBucketEnums.IMAGE_PREVIEW.getCode(), metadata.getStoragePath() + "/" + metadata.getFileMd5());
|
||||
return minioS3Client.getPreviewUrl(metadata.getFileMimeType(), StorageBucketEnums.getPreviewBucket(properties.getBucketPrefix()), metadata.getStoragePath() + "/" + metadata.getFileMd5());
|
||||
} catch (Exception e) {
|
||||
// 打印日志
|
||||
log.error(e.getMessage(), e);
|
||||
@ -404,7 +406,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
||||
if (Boolean.FALSE.equals(metadata.getIsPreview())) {
|
||||
|
||||
// 获取原图的bytes
|
||||
byte[] imageOriginBytes = minioS3Client.getObject(StorageBucketEnums.IMAGE.getCode(), metadata.getStoragePath() + "/" + metadata.getFileMd5());
|
||||
byte[] imageOriginBytes = minioS3Client.getObject(metadata.getStorageBucket(), metadata.getStoragePath() + "/" + metadata.getFileMd5());
|
||||
|
||||
// 定义文件流
|
||||
@Cleanup ByteArrayInputStream imageOriginInputStream = new ByteArrayInputStream(imageOriginBytes);
|
||||
@ -419,7 +421,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
||||
byte[] previewImageBytes = previewImage.toByteArray();
|
||||
@Cleanup ByteArrayInputStream previewImageInputStream = new ByteArrayInputStream(previewImageBytes);
|
||||
|
||||
minioS3Client.putObject(StorageBucketEnums.IMAGE_PREVIEW.getCode(), CommonUtil.getObjectName(metadata.getFileMd5()), previewImageInputStream, previewImageBytes.length, metadata.getFileMimeType());
|
||||
minioS3Client.putObject(StorageBucketEnums.getPreviewBucket(properties.getBucketPrefix()), CommonUtil.getObjectName(metadata.getFileMd5()), previewImageInputStream, previewImageBytes.length, metadata.getFileMimeType());
|
||||
metadata.setIsPreview(Boolean.TRUE);
|
||||
FileMetadataInfoUpdateDTO fileMetadataInfoUpdateDTO = BeanUtil.copyProperties(metadata, FileMetadataInfoUpdateDTO.class);
|
||||
metadataRepository.update(fileMetadataInfoUpdateDTO);
|
||||
@ -515,7 +517,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
||||
minioS3Client.removeObject(metadata.getStorageBucket(), metadata.getStoragePath() + "/" + metadata.getFileMd5());
|
||||
if (Boolean.TRUE.equals(metadata.getIsPreview())) {
|
||||
// 当存在缩略图时,同步删除缩略图
|
||||
minioS3Client.removeObject(StorageBucketEnums.IMAGE_PREVIEW.getCode(), metadata.getStoragePath() + "/" + metadata.getFileMd5());
|
||||
minioS3Client.removeObject(StorageBucketEnums.getPreviewBucket(properties.getBucketPrefix()), metadata.getStoragePath() + "/" + metadata.getFileMd5());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -806,7 +808,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
||||
String fileMimeType = FileUtil.getMimeType(bo.getFullFileName());
|
||||
|
||||
// 存储桶
|
||||
bucketName = StorageBucketEnums.getBucketByFileSuffix(suffix);
|
||||
bucketName = StorageBucketEnums.getBucketByFileSuffix(suffix,properties.getBucketPrefix());
|
||||
// 创建桶
|
||||
minioS3Client.makeBucket(bucketName);
|
||||
|
||||
|
||||
@ -249,7 +249,7 @@ public class StorageServiceImpl implements StorageService {
|
||||
String fileMimeType = ContentTypeUtil.getContentType(suffix);
|
||||
|
||||
// 根据文件后缀取得桶
|
||||
String storageBucket = StorageBucketEnums.getBucketByFileSuffix(suffix);
|
||||
String storageBucket = StorageBucketEnums.getBucketByFileSuffix(suffix,properties.getBucketPrefix());
|
||||
|
||||
// 取得存储路径
|
||||
String storagePath = CommonUtil.getPathByDate();
|
||||
|
||||
@ -173,7 +173,7 @@ public class StorageController implements StorageWebAPI {
|
||||
public void icon(String fileType) {
|
||||
try {
|
||||
// 根据文件后缀取得桶
|
||||
String storageBucket = StorageBucketEnums.getBucketByFileSuffix(fileType);
|
||||
String storageBucket = StorageBucketEnums.getBucketByFileSuffix(fileType,"");
|
||||
|
||||
ClassPathResource cpr = new ClassPathResource(storageBucket + ".png");
|
||||
|
||||
|
||||
@ -173,7 +173,7 @@ public class StorageController implements StorageWebAPI {
|
||||
public void icon(String fileType) {
|
||||
try {
|
||||
// 根据文件后缀取得桶
|
||||
String storageBucket = StorageBucketEnums.getBucketByFileSuffix(fileType);
|
||||
String storageBucket = StorageBucketEnums.getBucketByFileSuffix(fileType,"");
|
||||
|
||||
ClassPathResource cpr = new ClassPathResource(storageBucket + ".png");
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user