修复Minio和阿里云OSS中桶名称的拼写错误,添加生成预签名URL的方法
This commit is contained in:
parent
ca36af0868
commit
4fb15c1afa
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user