Spring Boot - 整合 Minio 实现文件上传

文章目录:

Spring Boot | 整合 Minio 实现文件上传

Minio

1、 简介

MinIO 是一个用 Golang 开发的基于 Apache License v2.0 源协议的对象存储服务。

它兼容亚马逊 S3 云存储服务接口,适合存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,单个文件可以是任意大小,从几kb到最大5T不等。

2、 安装

使用 docker 安装

docker pull minio/minio

3、 启动

docker run -d -p 9010:9000 -p 9020:9020 --name minio  -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=admin123456" -v E:\minio\data:/data -v E:\minio\config:/root/.minio minio/minio server /data --console-address ":9020"

说明:

  • -d:后台启动
  • -p:端口映射
  • --name:容器名称
  • -e:设置环境变量 --v:文件挂载
  • minio/minio server /data:启动命令
  • --console-address ":9020":静态端口

9020 为控制台访问端口。

4、 创建存储桶 & 设置权限

创建存储桶:

Spring Boot | 整合 Minio 实现文件上传

设置存储桶权限:

Spring Boot | 整合 Minio 实现文件上传

Spring Boot | 整合 Minio 实现文件上传

Spring Boot | 整合 Minio 实现文件上传

Spring Boot 整合 Minio

1、添加 Maven 依赖



    io.minio
    minio
    8.2.2



    cn.hutool
    hutool-all
    ${hutool.version}

2、 配置 Minio 属性

# minio配置信息
# 连接地址
minio.endpoint=http://127.0.0.1:9010
# 用户名
minio.accessKey=admin
# 密码
minio.secretKey=admin123456

3、Spring Boot 中配置 Minio

MinioProperties.java

@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProperties {
    /**
     * 连接地址
     */
    private String endpoint;
    /**
     * 用户名
     */
    private String accessKey;
    /**
     * 密码
     */
    private String secretKey;
}

MinioConfig.java

@Configuration
@EnableConfigurationProperties(MinioProperties.class)
public class MinioConfig {

    @Resource
    private MinioProperties minioProperties;

    @Bean
    public MinioClient minioClient() {
        return MinioClient.builder()
                .endpoint(minioProperties.getEndpoint())
                .credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey())
                .build();
    }
}

4、处理上传文件的控制器类

private static final String FILE_NAME_PATTERN = "{}_{}";

// ...

@RequestMapping("/upload")
public Object upload(MultipartFile file) {
    // 上传文件的原始文件名
    String originalFilename = file.getOriginalFilename();
    // 文件大小
    long fileSize = file.getSize();
    log.info("上传文件的原始文件名:{},文件大小:{}", originalFilename, fileSize);
    // 文件名:日期_原始文件名
    String fileName = StrUtil.format(FILE_NAME_PATTERN, DateUtil.format(new Date(), "yyyyMMddHHmmss"), originalFilename);
    log.info("格式化后的文件名:{}", fileName);

    try {
        minioClient.putObject(PutObjectArgs.builder().bucket("my-bucket")
                .object(fileName).stream(file.getInputStream(), fileSize, -1).contentType(file.getContentType()).build());
    } catch (Exception e) {
        log.info("上传文件失败!", e);
        return result(500, "上传失败!");
    }
    return result(200, "上传成功!");
}

FILE_NAME_PATTERN是上传文件的命名格式。第一个{}放的是上传时间,格式是yyyyMMddHHmmss,精确到秒。第二个{}放的是上传文件的原始文件名。

5、测试文件上传

Spring Boot | 整合 Minio 实现文件上传

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章