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(); } }