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}
+