MinIO版本升级

This commit is contained in:
macro 2020-08-15 10:13:09 +08:00
parent 3af3b81f1b
commit f6652cf46f
3 changed files with 73 additions and 17 deletions

View File

@ -1,9 +1,12 @@
package com.macro.mall.controller; 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.common.api.CommonResult;
import com.macro.mall.dto.BucketPolicyConfigDto;
import com.macro.mall.dto.MinioUploadDto; import com.macro.mall.dto.MinioUploadDto;
import io.minio.MinioClient; import io.minio.*;
import io.minio.policy.PolicyType;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -44,39 +47,68 @@ public class MinioController {
public CommonResult upload(@RequestParam("file") MultipartFile file) { public CommonResult upload(@RequestParam("file") MultipartFile file) {
try { try {
//创建一个MinIO的Java客户端 //创建一个MinIO的Java客户端
MinioClient minioClient = new MinioClient(ENDPOINT, ACCESS_KEY, SECRET_KEY); MinioClient minioClient =MinioClient.builder()
boolean isExist = minioClient.bucketExists(BUCKET_NAME); .endpoint(ENDPOINT)
.credentials(ACCESS_KEY,SECRET_KEY)
.build();
boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(BUCKET_NAME).build());
if (isExist) { if (isExist) {
LOGGER.info("存储桶已经存在!"); LOGGER.info("存储桶已经存在!");
} else { } else {
//创建存储桶并设置只读权限 //创建存储桶并设置只读权限
minioClient.makeBucket(BUCKET_NAME); minioClient.makeBucket(MakeBucketArgs.builder().bucket(BUCKET_NAME).build());
minioClient.setBucketPolicy(BUCKET_NAME, "*.*", PolicyType.READ_ONLY); BucketPolicyConfigDto bucketPolicyConfigDto = createBucketPolicyConfigDto(BUCKET_NAME);
SetBucketPolicyArgs setBucketPolicyArgs = SetBucketPolicyArgs.builder()
.bucket(BUCKET_NAME)
.config(JSONUtil.toJsonStr(bucketPolicyConfigDto))
.build();
minioClient.setBucketPolicy(setBucketPolicyArgs);
} }
String filename = file.getOriginalFilename(); String filename = file.getOriginalFilename();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
// 设置存储对象名称 // 设置存储对象名称
String objectName = sdf.format(new Date()) + "/" + filename; String objectName = sdf.format(new Date()) + "/" + filename;
// 使用putObject上传一个文件到存储桶中 // 使用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("文件上传成功!"); LOGGER.info("文件上传成功!");
MinioUploadDto minioUploadDto = new MinioUploadDto(); MinioUploadDto minioUploadDto = new MinioUploadDto();
minioUploadDto.setName(filename); minioUploadDto.setName(filename);
minioUploadDto.setUrl(ENDPOINT + "/" + BUCKET_NAME + "/" + objectName); minioUploadDto.setUrl(ENDPOINT + "/" + BUCKET_NAME + "/" + objectName);
return CommonResult.success(minioUploadDto); return CommonResult.success(minioUploadDto);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
LOGGER.info("上传发生错误: {}", e.getMessage()); LOGGER.info("上传发生错误: {}", e.getMessage());
} }
return CommonResult.failed(); 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("文件删除") @ApiOperation("文件删除")
@RequestMapping(value = "/delete", method = RequestMethod.POST) @RequestMapping(value = "/delete", method = RequestMethod.POST)
@ResponseBody @ResponseBody
public CommonResult delete(@RequestParam("objectName") String objectName) { public CommonResult delete(@RequestParam("objectName") String objectName) {
try { try {
MinioClient minioClient = new MinioClient(ENDPOINT, ACCESS_KEY, SECRET_KEY); MinioClient minioClient = MinioClient.builder()
minioClient.removeObject(BUCKET_NAME, objectName); .endpoint(ENDPOINT)
.credentials(ACCESS_KEY,SECRET_KEY)
.build();
minioClient.removeObject(RemoveObjectArgs.builder().bucket(BUCKET_NAME).object(objectName).build());
return CommonResult.success(null); return CommonResult.success(null);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

View File

@ -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;
}
}

View File

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