package com.nb.oss.strategy; import com.nb.core.exception.CustomException; import io.minio.*; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.io.InputStream; /** * Minio工具类 * * @author Kevin */ @Component @Slf4j public class MinioUtil { @Resource MinioConfig minioConfig; @Resource MinioClient minioClient; private static final String BUCKET_PARAM="--bucketName--"; private static final String PUBLIC_POLICY = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\",\"s3:GetBucketLocation\"],\"Resource\":[\"arn:aws:s3:::"+BUCKET_PARAM+"\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:ListMultipartUploadParts\",\"s3:PutObject\",\"s3:AbortMultipartUpload\",\"s3:DeleteObject\",\"s3:GetObject\"],\"Resource\":[\"arn:aws:s3:::"+BUCKET_PARAM+"/*\"]}]}"; @Bean private MinioClient minioClient() { MinioClient minioClient = MinioClient.builder() .endpoint(minioConfig.getUploadEndpoint(),minioConfig.getUploadPort(),minioConfig.isUploadSecure()) .credentials(minioConfig.getAccessKey(), minioConfig.getSecretKey()) .build(); return minioClient; } public String uploadObject(InputStream stream, String filepath) { try { boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioConfig.getBucketName()).build()); if (!exists) { minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioConfig.getBucketName()).build()); minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(minioConfig.getBucketName()) .config(PUBLIC_POLICY.replaceAll(BUCKET_PARAM,(minioConfig.getBucketName()))) .build()); } PutObjectArgs putObjectArgs = PutObjectArgs.builder() .bucket(minioConfig.getBucketName()) .object(filepath.startsWith("/")?filepath.substring(1):filepath) .contentType(MediaType.APPLICATION_OCTET_STREAM_VALUE) .stream(stream, stream.available(), -1).build(); minioClient.putObject(putObjectArgs); } catch (Exception e) { log.error("上传文件失败,{}", e.getMessage()); throw new CustomException("上传文件失败," + e.getMessage()); } return "/" + minioConfig.getBucketName() + filepath; } }