package com.tievd.jyz.util;
|
|
import com.amazonaws.services.s3.model.S3Object;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Component;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import java.io.InputStream;
|
|
/**
|
* @author timi
|
* 多级封装minio操作类,用于内外网minio分离
|
*/
|
@Slf4j
|
@Component
|
public class MultiMinioUtil{
|
/**
|
* 内部minio url
|
*/
|
private static String serviceEndpoint;
|
/**
|
* 外部minio url
|
*/
|
private static String extServiceEndpoint;
|
|
private static S3Util s3Util;
|
|
@Value("${init.minio.ext_minio_url:${init.minio.minio_url}}")
|
public void setExtServiceEndpoint(String extServiceEndpoint) {
|
MultiMinioUtil.extServiceEndpoint = extServiceEndpoint;
|
}
|
|
@Value("${init.minio.minio_url}")
|
public void setServiceEndpoint(String serviceEndpoint) {
|
MultiMinioUtil.serviceEndpoint = serviceEndpoint;
|
}
|
|
@Autowired
|
public void setS3Util(S3Util s3Util) {
|
MultiMinioUtil.s3Util = s3Util;
|
}
|
|
/**
|
* 上传文件
|
* @param file
|
* @return
|
*/
|
public static String upload(MultipartFile file){
|
try {
|
return s3Util.uploadObject(file.getBytes(),file.getOriginalFilename());
|
}catch (Exception ex){
|
ex.printStackTrace();
|
}
|
return StringUtils.EMPTY;
|
}
|
|
/**
|
* 上传文件
|
* @param file
|
* @return
|
*/
|
public static String upload(byte[] bytes,String fileName){
|
try {
|
return s3Util.uploadObject(bytes, fileName);
|
}catch (Exception ex){
|
ex.printStackTrace();
|
}
|
return StringUtils.EMPTY;
|
}
|
|
/**
|
* 删除文件
|
* @param bucketName
|
* @param objectName
|
*/
|
public static void removeObject(String bucketName, String objectName){
|
s3Util.delFile(bucketName,objectName);
|
}
|
|
/**
|
* 获取文件数据
|
* @param bucketName
|
* @param objectName
|
* @return
|
*/
|
public static InputStream getMinioFile(String bucketName, String objectName){
|
try {
|
S3Object s3Object = s3Util.download(objectName,bucketName);
|
return s3Object.getObjectContent();
|
} catch (Exception ex){
|
ex.printStackTrace();
|
}
|
return null;
|
}
|
|
/**
|
* 获取存储对象的url请求地址(外部访问地址)
|
* @param bucketName
|
* @param objectName
|
* @param expires 单位秒
|
* @return
|
*/
|
public static String getObjectURL(String bucketName, String objectName, Integer expires){
|
String innerUrl = s3Util.createUrl(bucketName,objectName,expires);
|
//签名url 对+进行编码
|
String signatureStr = StringUtils.substringAfterLast(innerUrl,"Signature=");
|
String signatureEncodeStr = signatureStr.replace("+","%2B").replace("=","%3D");
|
innerUrl = StringUtils.replace(innerUrl,signatureStr,signatureEncodeStr);
|
return StringUtils.replace(innerUrl,MultiMinioUtil.serviceEndpoint,MultiMinioUtil.extServiceEndpoint);
|
}
|
|
/**
|
* 获取桶名
|
* @return
|
*/
|
public static String getBucketName(){
|
return s3Util.getBucketName();
|
}
|
|
}
|