diff --git a/mall-admin/src/main/java/com/macro/mall/controller/MinioController.java b/mall-admin/src/main/java/com/macro/mall/controller/MinioController.java index e58fc77..094d15b 100644 --- a/mall-admin/src/main/java/com/macro/mall/controller/MinioController.java +++ b/mall-admin/src/main/java/com/macro/mall/controller/MinioController.java @@ -1,9 +1,12 @@ package com.macro.mall.controller; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.json.JSONUtil; import com.macro.mall.common.api.CommonResult; +import com.macro.mall.dto.BucketPolicyConfigDto; import com.macro.mall.dto.MinioUploadDto; -import io.minio.MinioClient; -import io.minio.policy.PolicyType; +import io.minio.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; @@ -44,39 +47,68 @@ public class MinioController { public CommonResult upload(@RequestParam("file") MultipartFile file) { try { //创建一个MinIO的Java客户端 - MinioClient minioClient = new MinioClient(ENDPOINT, ACCESS_KEY, SECRET_KEY); - boolean isExist = minioClient.bucketExists(BUCKET_NAME); + MinioClient minioClient =MinioClient.builder() + .endpoint(ENDPOINT) + .credentials(ACCESS_KEY,SECRET_KEY) + .build(); + boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(BUCKET_NAME).build()); if (isExist) { LOGGER.info("存储桶已经存在!"); } else { //创建存储桶并设置只读权限 - minioClient.makeBucket(BUCKET_NAME); - minioClient.setBucketPolicy(BUCKET_NAME, "*.*", PolicyType.READ_ONLY); + minioClient.makeBucket(MakeBucketArgs.builder().bucket(BUCKET_NAME).build()); + BucketPolicyConfigDto bucketPolicyConfigDto = createBucketPolicyConfigDto(BUCKET_NAME); + SetBucketPolicyArgs setBucketPolicyArgs = SetBucketPolicyArgs.builder() + .bucket(BUCKET_NAME) + .config(JSONUtil.toJsonStr(bucketPolicyConfigDto)) + .build(); + minioClient.setBucketPolicy(setBucketPolicyArgs); } String filename = file.getOriginalFilename(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); // 设置存储对象名称 String objectName = sdf.format(new Date()) + "/" + filename; // 使用putObject上传一个文件到存储桶中 - minioClient.putObject(BUCKET_NAME, objectName, file.getInputStream(), file.getContentType()); + PutObjectArgs putObjectArgs = PutObjectArgs.builder() + .bucket(BUCKET_NAME) + .object(objectName) + .contentType(file.getContentType()) + .stream(file.getInputStream(), file.getSize(), ObjectWriteArgs.MIN_MULTIPART_SIZE).build(); + minioClient.putObject(putObjectArgs); LOGGER.info("文件上传成功!"); MinioUploadDto minioUploadDto = new MinioUploadDto(); minioUploadDto.setName(filename); minioUploadDto.setUrl(ENDPOINT + "/" + BUCKET_NAME + "/" + objectName); return CommonResult.success(minioUploadDto); } catch (Exception e) { + e.printStackTrace(); LOGGER.info("上传发生错误: {}!", e.getMessage()); } return CommonResult.failed(); } + private BucketPolicyConfigDto createBucketPolicyConfigDto(String bucketName) { + BucketPolicyConfigDto.Statement statement = BucketPolicyConfigDto.Statement.builder() + .Effect("Allow") + .Principal("*") + .Action("s3:GetObject") + .Resource("arn:aws:s3:::"+bucketName+"/*.**").build(); + return BucketPolicyConfigDto.builder() + .Version("2012-10-17") + .Statement(CollUtil.toList(statement)) + .build(); + } + @ApiOperation("文件删除") @RequestMapping(value = "/delete", method = RequestMethod.POST) @ResponseBody public CommonResult delete(@RequestParam("objectName") String objectName) { try { - MinioClient minioClient = new MinioClient(ENDPOINT, ACCESS_KEY, SECRET_KEY); - minioClient.removeObject(BUCKET_NAME, objectName); + MinioClient minioClient = MinioClient.builder() + .endpoint(ENDPOINT) + .credentials(ACCESS_KEY,SECRET_KEY) + .build(); + minioClient.removeObject(RemoveObjectArgs.builder().bucket(BUCKET_NAME).object(objectName).build()); return CommonResult.success(null); } catch (Exception e) { e.printStackTrace(); diff --git a/mall-admin/src/main/java/com/macro/mall/dto/BucketPolicyConfigDto.java b/mall-admin/src/main/java/com/macro/mall/dto/BucketPolicyConfigDto.java new file mode 100644 index 0000000..c37f898 --- /dev/null +++ b/mall-admin/src/main/java/com/macro/mall/dto/BucketPolicyConfigDto.java @@ -0,0 +1,31 @@ +package com.macro.mall.dto; + +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * Minio Bucket访问策略配置 + * Created by macro on 2020/8/11. + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Builder +public class BucketPolicyConfigDto { + + private String Version; + private List Statement; + + @Data + @EqualsAndHashCode(callSuper = false) + @Builder + public static class Statement { + private String Effect; + private String Principal; + private String Action; + private String Resource; + + } +} diff --git a/pom.xml b/pom.xml index 96cddbb..ee2fe46 100644 --- a/pom.xml +++ b/pom.xml @@ -47,8 +47,7 @@ 0.9.0 2.5.0 5.3 - 3.0.10 - 20.0 + 7.1.0 1.0-SNAPSHOT 1.0-SNAPSHOT 1.0-SNAPSHOT @@ -197,12 +196,6 @@ minio ${minio.version} - - - com.google.guava - guava - ${guava.version} -