diff --git a/mall-admin/pom.xml b/mall-admin/pom.xml
index 2e66c9f..00066d5 100644
--- a/mall-admin/pom.xml
+++ b/mall-admin/pom.xml
@@ -33,6 +33,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 eb5b529..d020067 100644
--- a/mall-admin/src/main/resources/application.yml
+++ b/mall-admin/src/main/resources/application.yml
@@ -1,6 +1,10 @@
spring:
profiles:
active: dev #默认为开发环境
+ servlet:
+ multipart:
+ enabled: true #开启文件上传
+ max-file-size: 10MB #限制文件上传大小为10M
mybatis:
mapper-locations:
@@ -29,6 +33,7 @@ secure:
- /druid/**
- /admin/login
- /admin/register
+ - /minio/upload
aliyun:
oss:
@@ -43,6 +48,12 @@ aliyun:
dir:
prefix: mall/images/ # 上传文件夹路径前缀
+minio:
+ endpoint: http://192.168.3.101:9090 #MinIO服务所在地址
+ bucketName: mall #存储桶名称
+ accessKey: minioadmin #访问的key
+ secretKey: minioadmin #访问的秘钥
+
logging:
level:
root: info #日志配置DEBUG,INFO,WARN,ERROR
diff --git a/pom.xml b/pom.xml
index e0c3b78..1f78fd8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,6 +45,7 @@
0.9.0
2.5.0
4.8
+ 3.0.10
1.0-SNAPSHOT
1.0-SNAPSHOT
1.0-SNAPSHOT
@@ -175,6 +176,12 @@
logstash-logback-encoder
${logstash-logback.version}
+
+
+ io.minio
+ minio
+ ${minio.version}
+