MinioUtil.java 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package com.nb.oss.strategy;
  2. import com.nb.core.exception.CustomException;
  3. import io.minio.*;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.http.MediaType;
  7. import org.springframework.stereotype.Component;
  8. import javax.annotation.Resource;
  9. import java.io.InputStream;
  10. /**
  11. * Minio工具类
  12. *
  13. * @author Kevin
  14. */
  15. @Component
  16. @Slf4j
  17. public class MinioUtil {
  18. @Resource
  19. MinioConfig minioConfig;
  20. @Resource
  21. MinioClient minioClient;
  22. private static final String BUCKET_PARAM="--bucketName--";
  23. 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+"/*\"]}]}";
  24. @Bean
  25. private MinioClient minioClient() {
  26. MinioClient minioClient = MinioClient.builder()
  27. .endpoint(minioConfig.getUploadEndpoint(),minioConfig.getUploadPort(),minioConfig.isUploadSecure())
  28. .credentials(minioConfig.getAccessKey(), minioConfig.getSecretKey())
  29. .build();
  30. return minioClient;
  31. }
  32. public String uploadObject(InputStream stream, String filepath) {
  33. try {
  34. boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioConfig.getBucketName()).build());
  35. if (!exists) {
  36. minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioConfig.getBucketName()).build());
  37. minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(minioConfig.getBucketName())
  38. .config(PUBLIC_POLICY.replaceAll(BUCKET_PARAM,(minioConfig.getBucketName())))
  39. .build());
  40. }
  41. PutObjectArgs putObjectArgs = PutObjectArgs.builder()
  42. .bucket(minioConfig.getBucketName())
  43. .object(filepath.startsWith("/")?filepath.substring(1):filepath)
  44. .contentType(MediaType.APPLICATION_OCTET_STREAM_VALUE)
  45. .stream(stream, stream.available(), -1).build();
  46. minioClient.putObject(putObjectArgs);
  47. } catch (Exception e) {
  48. log.error("上传文件失败,{}", e.getMessage());
  49. throw new CustomException("上传文件失败," + e.getMessage());
  50. }
  51. return "/" + minioConfig.getBucketName() + filepath;
  52. }
  53. }