Browse Source

MinIO版本升级

macro 4 years ago
parent
commit
f6652cf46f

+ 41 - 9
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();

+ 31 - 0
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> Statement;
+
+    @Data
+    @EqualsAndHashCode(callSuper = false)
+    @Builder
+    public static class Statement {
+        private String Effect;
+        private String Principal;
+        private String Action;
+        private String Resource;
+
+    }
+}

+ 1 - 8
pom.xml

@@ -47,8 +47,7 @@
         <jjwt.version>0.9.0</jjwt.version>
         <aliyun-oss.version>2.5.0</aliyun-oss.version>
         <logstash-logback.version>5.3</logstash-logback.version>
-        <minio.version>3.0.10</minio.version>
-        <guava.version>20.0</guava.version>
+        <minio.version>7.1.0</minio.version>
         <mall-common.version>1.0-SNAPSHOT</mall-common.version>
         <mall-mbg.version>1.0-SNAPSHOT</mall-mbg.version>
         <mall-security.version>1.0-SNAPSHOT</mall-security.version>
@@ -197,12 +196,6 @@
                 <artifactId>minio</artifactId>
                 <version>${minio.version}</version>
             </dependency>
-            <!--统一Guava版本防止冲突-->
-            <dependency>
-                <groupId>com.google.guava</groupId>
-                <artifactId>guava</artifactId>
-                <version>${guava.version}</version>
-            </dependency>
         </dependencies>
     </dependencyManagement>