From 46e6170b78eb7ae3237e5cff287022b0431c4db3 Mon Sep 17 00:00:00 2001 From: macro Date: Sat, 4 Jan 2020 15:54:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0MinIO=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + mall-admin/pom.xml | 4 + .../mall/controller/MinioController.java | 85 +++++++++++++++++++ .../com/macro/mall/dto/MinioUploadDto.java | 15 ++++ mall-admin/src/main/resources/application.yml | 12 ++- pom.xml | 7 ++ 6 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 mall-admin/src/main/java/com/macro/mall/controller/MinioController.java create mode 100644 mall-admin/src/main/java/com/macro/mall/dto/MinioUploadDto.java diff --git a/README.md b/README.md index db6e4f9..44ddc8b 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ mall | Docker | 应用容器引擎 | https://www.docker.com/ | | Druid | 数据库连接池 | https://github.com/alibaba/druid | | OSS | 对象存储 | https://github.com/aliyun/aliyun-oss-java-sdk | +| MinIO | 对象存储 | https://github.com/minio/minio | | JWT | JWT登录支持 | https://github.com/jwtk/jjwt | | LogStash | 日志收集 | https://github.com/logstash/logstash-logback-encoder | | Lombok | 简化对象封装工具 | https://github.com/rzwitserloot/lombok | diff --git a/mall-admin/pom.xml b/mall-admin/pom.xml index 66055d5..43902bf 100644 --- a/mall-admin/pom.xml +++ b/mall-admin/pom.xml @@ -41,6 +41,10 @@ net.logstash.logback logstash-logback-encoder + + io.minio + minio + 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 new file mode 100644 index 0000000..1958965 --- /dev/null +++ b/mall-admin/src/main/java/com/macro/mall/controller/MinioController.java @@ -0,0 +1,85 @@ +package com.macro.mall.controller; + +import com.macro.mall.common.api.CommonResult; +import com.macro.mall.dto.MinioUploadDto; +import io.minio.MinioClient; +import io.minio.policy.PolicyType; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * Created by macro on 2019/12/25. + */ +@Api(tags = "MinioController", description = "MinIO对象存储管理") +@Controller +@RequestMapping("/minio") +public class MinioController { + + private static final Logger LOGGER = LoggerFactory.getLogger(MinioController.class); + @Value("${minio.endpoint}") + private String ENDPOINT; + @Value("${minio.bucketName}") + private String BUCKET_NAME; + @Value("${minio.accessKey}") + private String ACCESS_KEY; + @Value("${minio.secretKey}") + private String SECRET_KEY; + + @ApiOperation("文件上传") + @RequestMapping(value = "/upload", method = RequestMethod.POST) + @ResponseBody + 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); + if (isExist) { + LOGGER.info("存储桶已经存在!"); + } else { + //创建存储桶并设置只读权限 + minioClient.makeBucket(BUCKET_NAME); + minioClient.setBucketPolicy(BUCKET_NAME, "*.*", PolicyType.READ_ONLY); + } + 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()); + LOGGER.info("文件上传成功!"); + MinioUploadDto minioUploadDto = new MinioUploadDto(); + minioUploadDto.setName(filename); + minioUploadDto.setUrl(ENDPOINT + "/" + BUCKET_NAME + "/" + objectName); + return CommonResult.success(minioUploadDto); + } catch (Exception e) { + LOGGER.info("上传发生错误: {}!", e.getMessage()); + } + return CommonResult.failed(); + } + + @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); + return CommonResult.success(null); + } catch (Exception e) { + e.printStackTrace(); + } + return CommonResult.failed(); + } +} diff --git a/mall-admin/src/main/java/com/macro/mall/dto/MinioUploadDto.java b/mall-admin/src/main/java/com/macro/mall/dto/MinioUploadDto.java new file mode 100644 index 0000000..1ce3980 --- /dev/null +++ b/mall-admin/src/main/java/com/macro/mall/dto/MinioUploadDto.java @@ -0,0 +1,15 @@ +package com.macro.mall.dto; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 文件上传返回结果 + * Created by macro on 2019/12/25. + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class MinioUploadDto { + private String url; + private String name; +} diff --git a/mall-admin/src/main/resources/application.yml b/mall-admin/src/main/resources/application.yml index ea12c95..5967b96 100644 --- a/mall-admin/src/main/resources/application.yml +++ b/mall-admin/src/main/resources/application.yml @@ -19,6 +19,10 @@ spring: port: 5672 username: guest password: guest + servlet: + multipart: + enabled: true #开启文件上传 + max-file-size: 10MB #限制文件上传大小为10M mybatis: mapper-locations: - classpath:dao/*.xml @@ -52,6 +56,7 @@ secure: - /druid/** - /admin/login - /admin/register + - /minio/upload aliyun: oss: endpoint: oss-cn-shenzhen.aliyuncs.com # oss对外服务的访问域名 @@ -63,4 +68,9 @@ aliyun: maxSize: 10 # 上传文件大小(M) callback: http://39.98.190.128:8080/aliyun/oss/callback # 文件上传成功后的回调地址 dir: - prefix: mall/images/ # 上传文件夹路径前缀 \ No newline at end of file + prefix: mall/images/ # 上传文件夹路径前缀 +minio: + endpoint: http://192.168.6.132:9090 #MinIO服务所在地址 + bucketName: mall #存储桶名称 + accessKey: minioadmin #访问的key + secretKey: minioadmin #访问的秘钥 \ No newline at end of file diff --git a/pom.xml b/pom.xml index 76c1121..4c0a5c9 100644 --- a/pom.xml +++ b/pom.xml @@ -52,6 +52,7 @@ 2.5.0 5.3 2.1.5 + 3.0.10 1.0-SNAPSHOT 1.0-SNAPSHOT 1.0-SNAPSHOT @@ -184,6 +185,12 @@ spring-boot-admin-starter-server ${admin-starter-server.version} + + + io.minio + minio + ${minio.version} +