This commit is contained in:
ls
2024-10-12 09:52:06 +08:00
parent 76defc45b7
commit 08175e2602
6 changed files with 101 additions and 75 deletions

View File

@@ -13,6 +13,7 @@ import java.net.URLDecoder;
/**
* minio文件上传工具类
*
* @author: jeecg-boot
*/
@Slf4j
@@ -21,10 +22,8 @@ public class MinioUtil {
private static String minioName;
private static String minioPass;
private static String bucketName;
public static void setMinioUrl(String minioUrl) {
MinioUtil.minioUrl = minioUrl;
}
private static String minioPublicUrl;
private static MinioClient minioClient = null;
public static void setMinioName(String minioName) {
MinioUtil.minioName = minioName;
@@ -34,22 +33,33 @@ public class MinioUtil {
MinioUtil.minioPass = minioPass;
}
public static void setBucketName(String bucketName) {
MinioUtil.bucketName = bucketName;
}
public static String getMinioUrl() {
return minioUrl;
}
public static void setMinioUrl(String minioUrl) {
MinioUtil.minioUrl = minioUrl;
}
public static String getMinioPublicUrl() {
return minioPublicUrl;
}
public static void setMinioPublicUrl(String minioPublicUrl) {
MinioUtil.minioPublicUrl = minioPublicUrl;
}
public static String getBucketName() {
return bucketName;
}
private static MinioClient minioClient = null;
public static void setBucketName(String bucketName) {
MinioUtil.bucketName = bucketName;
}
/**
* 上传文件
*
* @param file
* @return
*/
@@ -64,13 +74,13 @@ public class MinioUtil {
//update-end-author:liusq date:20210809 for: 过滤上传文件类型
String newBucket = bucketName;
if(oConvertUtils.isNotEmpty(customBucket)){
if (oConvertUtils.isNotEmpty(customBucket)) {
newBucket = customBucket;
}
try {
initMinio(minioUrl, minioName,minioPass);
initMinio(minioUrl, minioName, minioPass);
// 检查存储桶是否已经存在
if(minioClient.bucketExists(BucketExistsArgs.builder().bucket(newBucket).build())) {
if (minioClient.bucketExists(BucketExistsArgs.builder().bucket(newBucket).build())) {
log.info("Bucket already exists.");
} else {
// 创建一个名为ota的存储桶
@@ -80,28 +90,28 @@ public class MinioUtil {
InputStream stream = file.getInputStream();
// 获取文件名
String orgName = file.getOriginalFilename();
if("".equals(orgName)){
orgName=file.getName();
if ("".equals(orgName)) {
orgName = file.getName();
}
orgName = CommonUtils.getFileName(orgName);
String objectName = bizPath+"/"
+( orgName.indexOf(".")==-1
?orgName + "_" + System.currentTimeMillis()
:orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf("."))
);
String objectName = bizPath + "/"
+ (orgName.indexOf(".") == -1
? orgName + "_" + System.currentTimeMillis()
: orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf("."))
);
// 使用putObject上传一个本地文件到存储桶中。
if(objectName.startsWith(SymbolConstant.SINGLE_SLASH)){
if (objectName.startsWith(SymbolConstant.SINGLE_SLASH)) {
objectName = objectName.substring(1);
}
PutObjectArgs objectArgs = PutObjectArgs.builder().object(objectName)
.bucket(newBucket)
.contentType("application/octet-stream")
.stream(stream,stream.available(),-1).build();
.stream(stream, stream.available(), -1).build();
minioClient.putObject(objectArgs);
stream.close();
fileUrl = minioUrl+newBucket+"/"+objectName;
}catch (Exception e){
fileUrl = minioPublicUrl + newBucket + "/" + objectName;
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return fileUrl;
@@ -109,21 +119,23 @@ public class MinioUtil {
/**
* 文件上传
*
* @param file
* @param bizPath
* @return
*/
public static String upload(MultipartFile file, String bizPath) throws Exception {
return upload(file,bizPath,null);
return upload(file, bizPath, null);
}
/**
* 获取文件流
*
* @param bucketName
* @param objectName
* @return
*/
public static InputStream getMinioFile(String bucketName,String objectName){
public static InputStream getMinioFile(String bucketName, String objectName) {
InputStream inputStream = null;
try {
initMinio(minioUrl, minioName, minioPass);
@@ -138,39 +150,41 @@ public class MinioUtil {
/**
* 删除文件
*
* @param bucketName
* @param objectName
* @throws Exception
*/
public static void removeObject(String bucketName, String objectName) {
try {
initMinio(minioUrl, minioName,minioPass);
initMinio(minioUrl, minioName, minioPass);
RemoveObjectArgs objectArgs = RemoveObjectArgs.builder().object(objectName)
.bucket(bucketName).build();
minioClient.removeObject(objectArgs);
}catch (Exception e){
} catch (Exception e) {
log.info("文件删除失败" + e.getMessage());
}
}
/**
* 获取文件外链
*
* @param bucketName
* @param objectName
* @param expires
* @return
*/
public static String getObjectUrl(String bucketName, String objectName, Integer expires) {
initMinio(minioUrl, minioName,minioPass);
try{
initMinio(minioUrl, minioName, minioPass);
try {
//update-begin---author:liusq Date:20220121 for获取文件外链报错提示method不能为空导致文件下载和预览失败----
GetPresignedObjectUrlArgs objectArgs = GetPresignedObjectUrlArgs.builder().object(objectName)
.bucket(bucketName)
.expiry(expires).method(Method.GET).build();
//update-begin---author:liusq Date:20220121 for获取文件外链报错提示method不能为空导致文件下载和预览失败----
String url = minioClient.getPresignedObjectUrl(objectArgs);
return URLDecoder.decode(url,"UTF-8");
}catch (Exception e){
return URLDecoder.decode(url, "UTF-8");
} catch (Exception e) {
log.info("文件路径获取失败" + e.getMessage());
}
return null;
@@ -178,12 +192,13 @@ public class MinioUtil {
/**
* 初始化客户端
*
* @param minioUrl
* @param minioName
* @param minioPass
* @return
*/
private static MinioClient initMinio(String minioUrl, String minioName,String minioPass) {
private static MinioClient initMinio(String minioUrl, String minioName, String minioPass) {
if (minioClient == null) {
try {
minioClient = MinioClient.builder()
@@ -199,13 +214,14 @@ public class MinioUtil {
/**
* 上传文件到minio
*
* @param stream
* @param relativePath
* @return
*/
public static String upload(InputStream stream,String relativePath) throws Exception {
initMinio(minioUrl, minioName,minioPass);
if(minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
public static String upload(InputStream stream, String relativePath) throws Exception {
initMinio(minioUrl, minioName, minioPass);
if (minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
log.info("Bucket already exists.");
} else {
// 创建一个名为ota的存储桶
@@ -215,10 +231,10 @@ public class MinioUtil {
PutObjectArgs objectArgs = PutObjectArgs.builder().object(relativePath)
.bucket(bucketName)
.contentType("application/octet-stream")
.stream(stream,stream.available(),-1).build();
.stream(stream, stream.available(), -1).build();
minioClient.putObject(objectArgs);
stream.close();
return minioUrl+bucketName+"/"+relativePath;
return minioUrl + bucketName + "/" + relativePath;
}
}

View File

@@ -11,6 +11,7 @@ import org.springframework.context.annotation.Configuration;
/**
* Minio文件上传配置文件
*
* @author: jeecg-boot
*/
@Slf4j
@@ -19,6 +20,8 @@ import org.springframework.context.annotation.Configuration;
public class MinioConfig {
@Value(value = "${jeecg.minio.minio_url}")
private String minioUrl;
@Value(value = "${jeecg.minio.minio_public_url}")
private String minioPublicUrl;
@Value(value = "${jeecg.minio.minio_name}")
private String minioName;
@Value(value = "${jeecg.minio.minio_pass}")
@@ -27,17 +30,18 @@ public class MinioConfig {
private String bucketName;
@Bean
public void initMinio(){
if(!minioUrl.startsWith(CommonConstant.STR_HTTP)){
public void initMinio() {
if (!minioUrl.startsWith(CommonConstant.STR_HTTP)) {
minioUrl = "http://" + minioUrl;
}
if(!minioUrl.endsWith(SymbolConstant.SINGLE_SLASH)){
if (!minioUrl.endsWith(SymbolConstant.SINGLE_SLASH)) {
minioUrl = minioUrl.concat(SymbolConstant.SINGLE_SLASH);
}
MinioUtil.setMinioUrl(minioUrl);
MinioUtil.setMinioName(minioName);
MinioUtil.setMinioPass(minioPass);
MinioUtil.setBucketName(bucketName);
MinioUtil.setMinioPublicUrl(minioPublicUrl);
}
}