Java SpringBoot 集成 MinIO 资料

Java SpringBoot 集成 MinIO 资料



一、文档
  1. 官方文档
  2. CSDN项目示例
  3. 解除Spring文件上传大小限制
二、个人实战

注意事项:

  • 部署MinIO时会涉及到两个端口号,一个为endpoint的端口,一个为console的端口,注意不要弄混

    比如:

    • endpoint的端口为18893
    • console的端口为18894
  • pom.xml
    <dependency>
        <groupId>io.minio</groupId>
        <artifactId>minio</artifactId>
        <version>7.0.2</version>
    </dependency>
    
  • 配置文件
    minio:
      bucket: 
      endpoint: 
      access-key: 
      secret-key: 
      url: ${minio.endpoint}/${minio.bucket}/
    
  • 配置实体类
    @Data
    @ConfigurationProperties(prefix = "minio")
    public class MinIOProperty {
    
        private String bucket;
        private String endpoint;
        private String access_key;
        private String secret_key;
        private String url;
    
    }
    
    @Configuration
    @EnableConfigurationProperties({MinIOProperty.class})
    public class ApplicationConfig {
    
    }
    
  • DTO
    @Data
    @ApiModel(description = "文件的DTO")
    public class FileDTO {
    
        @ApiModelProperty(value = "上传文件原始名称")
        private String origin_file_name;
    
        @ApiModelProperty(value = "上传文件格式化后的名称")
        private String encode_file_name;
    
        @ApiModelProperty(value = "上传文件的地址")
        private String url;
    
    }
    
  • Util
    @Service
    public class MinIOUtil {
    
        private final MinIOProperty minIOProperty;
    
        private final MinioClient minioClient;
    
        private final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss_");
    
        public MinIOUtil(MinIOProperty minIOProperty) throws InvalidPortException, InvalidEndpointException {
    
            this.minIOProperty = minIOProperty;
    
            this.minioClient = new MinioClient(
                    minIOProperty.getEndpoint(),
                    minIOProperty.getAccess_key(),
                    minIOProperty.getSecret_key()
            );
    
        }
    
        public FileDTO upload(String path, MultipartFile multipartFile) throws Exception {
    
            // bucket 不存在,创建
            if (!minioClient.bucketExists(this.minIOProperty.getBucket())) {
                minioClient.makeBucket(this.minIOProperty.getBucket());
            }
    
            try (InputStream inputStream = multipartFile.getInputStream()) {
    
                // 上传文件的名称
                String fileName = multipartFile.getOriginalFilename();
    
                //格式化文件名称
                String encode_fileName = this.getNowString() + fileName;
                String objectName = path + "/" + encode_fileName;
    
                // PutObjectOptions,上传配置(文件大小,内存中文件分片大小)
                PutObjectOptions putObjectOptions = new PutObjectOptions(multipartFile.getSize(), PutObjectOptions.MIN_MULTIPART_SIZE);
    
                // 文件的ContentType
                putObjectOptions.setContentType(multipartFile.getContentType());
    
                minioClient.putObject(this.minIOProperty.getBucket(), objectName, inputStream, putObjectOptions);
    
                // 返回访问路径
                assert fileName != null;
    
                FileDTO fileDTO = new FileDTO();
                fileDTO.setOrigin_file_name(fileName);
                fileDTO.setEncode_file_name(encode_fileName);
                fileDTO.setUrl(this.minIOProperty.getUrl() + UriUtils.encode(objectName, StandardCharsets.UTF_8));
    
                return fileDTO;
    
            }
    
        }
    
        private String getNowString() {
            Date date = new Date();
            return this.sdf.format(date);
        }
    
    }
    
  • Controller
    @Api(tags = "MinIO文件上传模块")
    @RestController
    @CrossOrigin
    @RequestMapping("/minio")
    public class MinioController {
    
        private final MinIOUtil minIOUtil;
    
        private final CaseFileService caseFileService;
    
        public MinioController(MinIOUtil minIOUtil, CaseFileService caseFileService) {
            this.minIOUtil = minIOUtil;
            this.caseFileService = caseFileService;
        }
    
        @PostMapping("/upload")
        @ApiOperation(value = "上传文件")
        @ApiImplicitParams({
                @ApiImplicitParam(name = "file", value = "上传的文件", required = true)
        })
        public void upload(@RequestParam("file") MultipartFile multipartFile) throws Exception {
    
            FileDTO fileDTO = this.minIOUtil.upload("", multipartFile);
    
        }
    
    }
    

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值