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