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;
|
private String browserUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 桶名前缀,默认为空。如果多个SDK连接同一个minio后端服务,可以配置不同的前缀来区分。
|
||||||
|
* 可选参数,特殊字符不支持,需符合S3存储路径的命名规则
|
||||||
|
* 具体规则参考 https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html
|
||||||
|
*/
|
||||||
|
private String bucketPrefix = "";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 上传预签名URL有效期,单位为分钟
|
* 上传预签名URL有效期,单位为分钟
|
||||||
* 可选参数,默认值为60分钟
|
* 可选参数,默认值为60分钟
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package org.liuxp.minioplus.common.enums;
|
package org.liuxp.minioplus.common.enums;
|
||||||
|
|
||||||
|
import cn.hutool.core.text.CharSequenceUtil;
|
||||||
import cn.hutool.core.util.ArrayUtil;
|
import cn.hutool.core.util.ArrayUtil;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -93,18 +94,40 @@ public enum StorageBucketEnums {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据扩展名取得桶编码
|
* 根据扩展名取得桶名
|
||||||
* @param suffix 扩展名
|
* @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))
|
.filter(item -> ArrayUtil.contains(item.types, suffix))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElse(StorageBucketEnums.OTHER)
|
.orElse(StorageBucketEnums.OTHER)
|
||||||
.code;
|
.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);
|
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();
|
return metadata.getFileSuffix();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 生成缩略图
|
// 生成缩略图
|
||||||
generatePreviewImage(metadata);
|
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) {
|
} catch (Exception e) {
|
||||||
// 打印日志
|
// 打印日志
|
||||||
log.error(e.getMessage(), e);
|
log.error(e.getMessage(), e);
|
||||||
@ -404,7 +406,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
|||||||
if (Boolean.FALSE.equals(metadata.getIsPreview())) {
|
if (Boolean.FALSE.equals(metadata.getIsPreview())) {
|
||||||
|
|
||||||
// 获取原图的bytes
|
// 获取原图的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);
|
@Cleanup ByteArrayInputStream imageOriginInputStream = new ByteArrayInputStream(imageOriginBytes);
|
||||||
@ -419,7 +421,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
|||||||
byte[] previewImageBytes = previewImage.toByteArray();
|
byte[] previewImageBytes = previewImage.toByteArray();
|
||||||
@Cleanup ByteArrayInputStream previewImageInputStream = new ByteArrayInputStream(previewImageBytes);
|
@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);
|
metadata.setIsPreview(Boolean.TRUE);
|
||||||
FileMetadataInfoUpdateDTO fileMetadataInfoUpdateDTO = BeanUtil.copyProperties(metadata, FileMetadataInfoUpdateDTO.class);
|
FileMetadataInfoUpdateDTO fileMetadataInfoUpdateDTO = BeanUtil.copyProperties(metadata, FileMetadataInfoUpdateDTO.class);
|
||||||
metadataRepository.update(fileMetadataInfoUpdateDTO);
|
metadataRepository.update(fileMetadataInfoUpdateDTO);
|
||||||
@ -515,7 +517,7 @@ public class StorageEngineServiceImpl implements StorageEngineService {
|
|||||||
minioS3Client.removeObject(metadata.getStorageBucket(), metadata.getStoragePath() + "/" + metadata.getFileMd5());
|
minioS3Client.removeObject(metadata.getStorageBucket(), metadata.getStoragePath() + "/" + metadata.getFileMd5());
|
||||||
if (Boolean.TRUE.equals(metadata.getIsPreview())) {
|
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());
|
String fileMimeType = FileUtil.getMimeType(bo.getFullFileName());
|
||||||
|
|
||||||
// 存储桶
|
// 存储桶
|
||||||
bucketName = StorageBucketEnums.getBucketByFileSuffix(suffix);
|
bucketName = StorageBucketEnums.getBucketByFileSuffix(suffix,properties.getBucketPrefix());
|
||||||
// 创建桶
|
// 创建桶
|
||||||
minioS3Client.makeBucket(bucketName);
|
minioS3Client.makeBucket(bucketName);
|
||||||
|
|
||||||
|
|||||||
@ -249,7 +249,7 @@ public class StorageServiceImpl implements StorageService {
|
|||||||
String fileMimeType = ContentTypeUtil.getContentType(suffix);
|
String fileMimeType = ContentTypeUtil.getContentType(suffix);
|
||||||
|
|
||||||
// 根据文件后缀取得桶
|
// 根据文件后缀取得桶
|
||||||
String storageBucket = StorageBucketEnums.getBucketByFileSuffix(suffix);
|
String storageBucket = StorageBucketEnums.getBucketByFileSuffix(suffix,properties.getBucketPrefix());
|
||||||
|
|
||||||
// 取得存储路径
|
// 取得存储路径
|
||||||
String storagePath = CommonUtil.getPathByDate();
|
String storagePath = CommonUtil.getPathByDate();
|
||||||
|
|||||||
@ -173,7 +173,7 @@ public class StorageController implements StorageWebAPI {
|
|||||||
public void icon(String fileType) {
|
public void icon(String fileType) {
|
||||||
try {
|
try {
|
||||||
// 根据文件后缀取得桶
|
// 根据文件后缀取得桶
|
||||||
String storageBucket = StorageBucketEnums.getBucketByFileSuffix(fileType);
|
String storageBucket = StorageBucketEnums.getBucketByFileSuffix(fileType,"");
|
||||||
|
|
||||||
ClassPathResource cpr = new ClassPathResource(storageBucket + ".png");
|
ClassPathResource cpr = new ClassPathResource(storageBucket + ".png");
|
||||||
|
|
||||||
|
|||||||
@ -173,7 +173,7 @@ public class StorageController implements StorageWebAPI {
|
|||||||
public void icon(String fileType) {
|
public void icon(String fileType) {
|
||||||
try {
|
try {
|
||||||
// 根据文件后缀取得桶
|
// 根据文件后缀取得桶
|
||||||
String storageBucket = StorageBucketEnums.getBucketByFileSuffix(fileType);
|
String storageBucket = StorageBucketEnums.getBucketByFileSuffix(fileType,"");
|
||||||
|
|
||||||
ClassPathResource cpr = new ClassPathResource(storageBucket + ".png");
|
ClassPathResource cpr = new ClassPathResource(storageBucket + ".png");
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user