From 4fb15c1afa056e164e3811b7e3655fc8e071c0b5 Mon Sep 17 00:00:00 2001 From: Dftre <3066417822@qq.com> Date: Sun, 23 Feb 2025 18:07:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DMinio=E5=92=8C=E9=98=BF?= =?UTF-8?q?=E9=87=8C=E4=BA=91OSS=E4=B8=AD=E6=A1=B6=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E7=9A=84=E6=8B=BC=E5=86=99=E9=94=99=E8=AF=AF=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=94=9F=E6=88=90=E9=A2=84=E7=AD=BE=E5=90=8DURL?= =?UTF-8?q?=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../middleware/minio/config/MinioConfig.java | 6 ++-- .../middleware/minio/domain/MinioBucket.java | 36 +++++++++++++------ .../minio/service/MinioFileService.java | 26 ++------------ .../middleware/minio/utils/MinioUtil.java | 14 ++++++++ .../alibaba/oss/domain/AliOssBucket.java | 10 ++++++ .../oss/service/AliOssFileService.java | 25 +------------ .../ruoyi/alibaba/oss/utils/AliOssUtil.java | 13 +++++-- 7 files changed, 66 insertions(+), 64 deletions(-) diff --git a/ruoyi-middleware/ruoyi-middleware-minio/src/main/java/com/ruoyi/middleware/minio/config/MinioConfig.java b/ruoyi-middleware/ruoyi-middleware-minio/src/main/java/com/ruoyi/middleware/minio/config/MinioConfig.java index 1daeb65..18c88e5 100644 --- a/ruoyi-middleware/ruoyi-middleware-minio/src/main/java/com/ruoyi/middleware/minio/config/MinioConfig.java +++ b/ruoyi-middleware/ruoyi-middleware-minio/src/main/java/com/ruoyi/middleware/minio/config/MinioConfig.java @@ -54,20 +54,20 @@ public class MinioConfig implements InitializingBean { } private static void validateMinioBucket(MinioBucket minioBucket) { - BucketExistsArgs bucketExistArgs = BucketExistsArgs.builder().bucket(minioBucket.getBuketName()).build(); + BucketExistsArgs bucketExistArgs = BucketExistsArgs.builder().bucket(minioBucket.getBucketName()).build(); boolean b = false; try { b = minioBucket.getClient().bucketExists(bucketExistArgs); PutObjectArgs putObjectArgs = PutObjectArgs.builder() .object(FileUtils.getRelativePath(RuoYiConfig.getProfile()) + "/") - .stream(EmptyInputStream.nullInputStream(), 0, -1).bucket(minioBucket.getBuketName()).build(); + .stream(EmptyInputStream.nullInputStream(), 0, -1).bucket(minioBucket.getBucketName()).build(); minioBucket.getClient().putObject(putObjectArgs); } catch (Exception e) { logger.error("数据桶:{} - 链接失败", minioBucket.getName()); throw new RuntimeException(e.getMessage()); } if (!b) { - throw new RuntimeException("Bucket " + minioBucket.getBuketName() + " does not exist"); + throw new RuntimeException("Bucket " + minioBucket.getBucketName() + " does not exist"); } } diff --git a/ruoyi-middleware/ruoyi-middleware-minio/src/main/java/com/ruoyi/middleware/minio/domain/MinioBucket.java b/ruoyi-middleware/ruoyi-middleware-minio/src/main/java/com/ruoyi/middleware/minio/domain/MinioBucket.java index 9b28b56..79cb43b 100644 --- a/ruoyi-middleware/ruoyi-middleware-minio/src/main/java/com/ruoyi/middleware/minio/domain/MinioBucket.java +++ b/ruoyi-middleware/ruoyi-middleware-minio/src/main/java/com/ruoyi/middleware/minio/domain/MinioBucket.java @@ -2,6 +2,8 @@ package com.ruoyi.middleware.minio.domain; import java.io.IOException; import java.io.InputStream; +import java.net.URL; +import java.util.concurrent.TimeUnit; import org.springframework.web.multipart.MultipartFile; @@ -10,37 +12,39 @@ import com.ruoyi.middleware.minio.exception.MinioClientErrorException; import io.minio.GetObjectArgs; import io.minio.GetObjectResponse; +import io.minio.GetPresignedObjectUrlArgs; import io.minio.MinioClient; import io.minio.PutObjectArgs; import io.minio.RemoveObjectArgs; +import io.minio.http.Method; public class MinioBucket { private MinioClient client; - private String buketName; + private String bucketName; public MinioBucket() { } - public MinioBucket(MinioClient client, String buketName) { + public MinioBucket(MinioClient client, String bucketName) { this.client = client; - this.buketName = buketName; + this.bucketName = bucketName; } public String getName() { - return buketName; + return bucketName; } public MinioClient getClient() { return client; } - public String getBuketName() { - return buketName; + public String getBucketName() { + return bucketName; } - public void setBuketName(String buketName) { - this.buketName = buketName; + public void setBucketName(String buketName) { + this.bucketName = bucketName; } public void setClient(MinioClient client) { @@ -54,7 +58,7 @@ public class MinioBucket { public void put(String filePath, String contentType, InputStream inputStream) throws Exception { PutObjectArgs build = PutObjectArgs.builder().contentType(contentType) .stream(inputStream, inputStream.available(), -1) - .bucket(this.buketName).object(filePath).build(); + .bucket(bucketName).object(filePath).build(); put(build); } @@ -67,7 +71,7 @@ public class MinioBucket { } public void remove(String filePath) throws Exception { - RemoveObjectArgs build = RemoveObjectArgs.builder().object(filePath).bucket(buketName).build(); + RemoveObjectArgs build = RemoveObjectArgs.builder().object(filePath).bucket(bucketName).build(); remove(build); } @@ -84,7 +88,7 @@ public class MinioBucket { * @throws IOException 比如读写文件出错时 */ public MinioFileVO get(String filePath) throws Exception { - GetObjectArgs getObjectArgs = GetObjectArgs.builder().object(filePath).bucket(buketName).build(); + GetObjectArgs getObjectArgs = GetObjectArgs.builder().object(filePath).bucket(bucketName).build(); GetObjectResponse inputStream = this.client.getObject(getObjectArgs); MinioFileVO minioFileVO = new MinioFileVO(); @@ -97,4 +101,14 @@ public class MinioBucket { minioFileVO.setHeaders(inputStream.headers()); return minioFileVO; } + + public URL generatePresignedUrl(String filePath) throws Exception { + GetPresignedObjectUrlArgs request = GetPresignedObjectUrlArgs.builder() + .method(Method.GET) + .bucket(bucketName) + .object(filePath) + .expiry(1, TimeUnit.HOURS) // 设置过期时间为1小时 + .build(); + return new URL(client.getPresignedObjectUrl(request)); + } } diff --git a/ruoyi-middleware/ruoyi-middleware-minio/src/main/java/com/ruoyi/middleware/minio/service/MinioFileService.java b/ruoyi-middleware/ruoyi-middleware-minio/src/main/java/com/ruoyi/middleware/minio/service/MinioFileService.java index 0904ea1..6123bab 100644 --- a/ruoyi-middleware/ruoyi-middleware-minio/src/main/java/com/ruoyi/middleware/minio/service/MinioFileService.java +++ b/ruoyi-middleware/ruoyi-middleware-minio/src/main/java/com/ruoyi/middleware/minio/service/MinioFileService.java @@ -2,7 +2,6 @@ package com.ruoyi.middleware.minio.service; import java.io.InputStream; import java.net.URL; -import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,10 +20,6 @@ import com.ruoyi.middleware.minio.exception.MinioClientErrorException; import com.ruoyi.middleware.minio.exception.MinioClientNotFundException; import com.ruoyi.middleware.minio.utils.MinioUtil; -import io.minio.GetPresignedObjectUrlArgs; -import io.minio.MinioClient; -import io.minio.http.Method; - /** * Minio文件操作实现类 */ @@ -79,24 +74,7 @@ public class MinioFileService implements FileService { * @throws MinioClientErrorException 如果在创建或获取预签名URL过程中发生错误时抛出 */ @Override - public URL generatePresignedUrl(String filePath) throws MinioClientNotFundException, MinioClientErrorException { - MinioClient minioClient = null; // 创建并且实例化 - try { - minioClient = minioConfig.getPrimaryMinioClient(); // 调用封装好的MinioConfig中的方法获取Minio客户端 - String bucketName = minioConfig.getClient().get(minioConfig.getPrimary()).getBucketName(); - GetPresignedObjectUrlArgs request = GetPresignedObjectUrlArgs.builder() - .method(Method.GET) - .bucket(bucketName) - .object(filePath) - .expiry(1, TimeUnit.HOURS) // 设置过期时间为1小时 - .build(); - // 生成预签名URL - String presignedUrl = minioClient.getPresignedObjectUrl(request); - URL url = new URL(presignedUrl); // 将字符串形式的预签名URL转换为URL对象并返回 - return url; - } catch (Exception e) { - logger.error("生成Minio预签名URL失败: {}", e.getMessage(), e); // 添加日志记录 - throw new MinioClientErrorException("生成Minio预签名URL失败: " + e.getMessage(), e); - } + public URL generatePresignedUrl(String filePath) throws Exception { + return MinioUtil.generatePresignedUrl(filePath); } } diff --git a/ruoyi-middleware/ruoyi-middleware-minio/src/main/java/com/ruoyi/middleware/minio/utils/MinioUtil.java b/ruoyi-middleware/ruoyi-middleware-minio/src/main/java/com/ruoyi/middleware/minio/utils/MinioUtil.java index 6505034..ee98239 100644 --- a/ruoyi-middleware/ruoyi-middleware-minio/src/main/java/com/ruoyi/middleware/minio/utils/MinioUtil.java +++ b/ruoyi-middleware/ruoyi-middleware-minio/src/main/java/com/ruoyi/middleware/minio/utils/MinioUtil.java @@ -1,6 +1,7 @@ package com.ruoyi.middleware.minio.utils; import java.io.IOException; +import java.net.URL; import org.springframework.web.multipart.MultipartFile; @@ -9,6 +10,7 @@ import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.uuid.UUID; import com.ruoyi.middleware.minio.config.MinioConfig; +import com.ruoyi.middleware.minio.domain.MinioBucket; import com.ruoyi.middleware.minio.domain.MinioFileVO; import com.ruoyi.middleware.minio.exception.MinioClientErrorException; @@ -121,4 +123,16 @@ public class MinioUtil { return getMinioConfig().getBucket(client).get(filePath); } + + + public static URL generatePresignedUrl(String filePath) throws Exception{ + MinioBucket minioBucket = getMinioConfig().getMasterBucket(); + return minioBucket.generatePresignedUrl(filePath); + } + + public static URL generatePresignedUrl(String client, String filePath) throws Exception { + MinioBucket minioBucket = getMinioConfig().getBucket(client); + return minioBucket.generatePresignedUrl(filePath); + } + } diff --git a/ruoyi-plugins/ruoyi-alibaba-oss/src/main/java/com/ruoyi/alibaba/oss/domain/AliOssBucket.java b/ruoyi-plugins/ruoyi-alibaba-oss/src/main/java/com/ruoyi/alibaba/oss/domain/AliOssBucket.java index c86fbab..1146bd2 100644 --- a/ruoyi-plugins/ruoyi-alibaba-oss/src/main/java/com/ruoyi/alibaba/oss/domain/AliOssBucket.java +++ b/ruoyi-plugins/ruoyi-alibaba-oss/src/main/java/com/ruoyi/alibaba/oss/domain/AliOssBucket.java @@ -1,6 +1,8 @@ package com.ruoyi.alibaba.oss.domain; import java.io.InputStream; +import java.net.URL; +import java.util.Date; import java.util.List; import org.slf4j.Logger; @@ -9,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile; import com.aliyun.oss.OSS; import com.aliyun.oss.model.DeleteObjectsRequest; +import com.aliyun.oss.model.GeneratePresignedUrlRequest; import com.aliyun.oss.model.GetObjectRequest; import com.aliyun.oss.model.OSSObject; import com.aliyun.oss.model.ObjectMetadata; @@ -117,4 +120,11 @@ public class AliOssBucket { fileVO.setFilePath(filePath); return fileVO; } + + public URL generatePresignedUrl(String filePath){ + GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, filePath); + Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000); // 设置过期时间为1小时 + request.setExpiration(expiration); + return ossClient.generatePresignedUrl(request); + } } \ No newline at end of file diff --git a/ruoyi-plugins/ruoyi-alibaba-oss/src/main/java/com/ruoyi/alibaba/oss/service/AliOssFileService.java b/ruoyi-plugins/ruoyi-alibaba-oss/src/main/java/com/ruoyi/alibaba/oss/service/AliOssFileService.java index 1e4e4ed..9b996f2 100644 --- a/ruoyi-plugins/ruoyi-alibaba-oss/src/main/java/com/ruoyi/alibaba/oss/service/AliOssFileService.java +++ b/ruoyi-plugins/ruoyi-alibaba-oss/src/main/java/com/ruoyi/alibaba/oss/service/AliOssFileService.java @@ -2,17 +2,12 @@ package com.ruoyi.alibaba.oss.service; import java.io.InputStream; import java.net.URL; -import java.util.Date; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; -import com.aliyun.oss.OSS; -import com.aliyun.oss.model.GeneratePresignedUrlRequest; import com.ruoyi.alibaba.oss.config.AliOssConfig; import com.ruoyi.alibaba.oss.domain.AliOssFileVO; import com.ruoyi.alibaba.oss.exception.AliOssClientErrorException; @@ -30,8 +25,6 @@ import com.ruoyi.common.utils.file.FileUtils; @ConditionalOnProperty(prefix = "oss", name = { "enable" }, havingValue = "true", matchIfMissing = false) public class AliOssFileService implements FileService { - private static final Logger logger = LoggerFactory.getLogger(AliOssConfig.class); - @Autowired private AliOssConfig aliOssConfig; @@ -79,22 +72,6 @@ public class AliOssFileService implements FileService { */ @Override public URL generatePresignedUrl(String filePath) throws AliOssClientNotFundException, AliOssClientErrorException { - OSS ossClient = null; // 创建并且实例化 - try { - ossClient = aliOssConfig.getPrimaryOssClient(); // 调用封装好的AliOssConfig中的方法获取OSS客户端 - String bucketName = aliOssConfig.getClient().get(aliOssConfig.getPrimary()).getBucketName(); - GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, filePath); - Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000); // 设置过期时间为1小时 - request.setExpiration(expiration); - // 生成预签名URL - return ossClient.generatePresignedUrl(request); - } catch (Exception e) { - logger.error("生成Oss预签名URL失败: {}", e.getMessage(), e); // 添加日志记录 - throw new AliOssClientErrorException("生成Oss预签名URL失败: " + e.getMessage(), e); - } finally { - if (ossClient != null) { - ossClient.shutdown(); // 手动关闭OSS客户端资源 - } - } + return AliOssUtil.generatePresignedUrl(filePath); } } \ No newline at end of file diff --git a/ruoyi-plugins/ruoyi-alibaba-oss/src/main/java/com/ruoyi/alibaba/oss/utils/AliOssUtil.java b/ruoyi-plugins/ruoyi-alibaba-oss/src/main/java/com/ruoyi/alibaba/oss/utils/AliOssUtil.java index 8865c52..5abda28 100644 --- a/ruoyi-plugins/ruoyi-alibaba-oss/src/main/java/com/ruoyi/alibaba/oss/utils/AliOssUtil.java +++ b/ruoyi-plugins/ruoyi-alibaba-oss/src/main/java/com/ruoyi/alibaba/oss/utils/AliOssUtil.java @@ -1,8 +1,8 @@ package com.ruoyi.alibaba.oss.utils; import java.io.IOException; +import java.net.URL; -import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import com.ruoyi.alibaba.oss.config.AliOssConfig; @@ -17,7 +17,6 @@ import com.ruoyi.common.utils.uuid.UUID; /** * oss工具 */ -@Component public class AliOssUtil { private static AliOssConfig aliOssConfig; @@ -128,4 +127,14 @@ public class AliOssUtil { } return ossBucket.get(filePath); } + + public static URL generatePresignedUrl(String filePath) { + AliOssBucket ossBucket = getAliOssConfig().getMasterBucket(); + return ossBucket.generatePresignedUrl(filePath); + } + + public static URL generatePresignedUrl(String client, String filePath) { + AliOssBucket ossBucket = getAliOssConfig().getBucket(client); + return ossBucket.generatePresignedUrl(filePath); + } } \ No newline at end of file