关键词

Springboot集成minio实现文件存储的实现代码

下面我会详细讲解如何使用Springboot集成Minio实现文件存储的实现代码,步骤如下:

1. 引入依赖

在Springboot项目中,我们需要引入Minio的Java SDK依赖,如下所示:

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>10.0.8</version>
</dependency>

2. 配置application.yml

在配置文件中添加Minio参数的配置,如下所示:

spring:
  application:
    name: minio-demo
  minio:
    endpoint: http://localhost:9000 # Minio服务器的访问地址
    access-key: minioadmin # 登录Minio的access-key
    secret-key: minioadmin # 登录Minio的secret-key
    bucket-name: my-bucket # 存储文件的桶名
    auto-create-bucket: true # 桶不存在时自动创建,默认为false

3. 配置MinioClient

在Springboot项目中,我们需要配置一个MinioClient对象,如下所示:

@Configuration
public class MinioConfig {

    @Autowired
    private Environment env;

    @Bean
    public MinioClient minioClient() throws InvalidEndpointException, InvalidPortException {
        String endpoint = env.getProperty("spring.minio.endpoint");
        String accessKey = env.getProperty("spring.minio.access-key");
        String secretKey = env.getProperty("spring.minio.secret-key");
        return new MinioClient(endpoint, accessKey, secretKey);
    }
}

4. 存储文件

存储文件有多种方式,例如使用分片上传、使用putObject等方法。下面我们以putObject方法为例:

@RestController
@RequestMapping("/file")
public class FileController {

    @Autowired
    private MinioClient minioClient;

    @Value("${spring.minio.bucket-name}")
    private String bucketName;

    @PostMapping("/upload")
    public String upload(MultipartFile file) throws Exception {
        String fileName = file.getOriginalFilename();
        InputStream inputStream = file.getInputStream();
        long fileSize = file.getSize();
        // 设置Content-Type为image/jpeg
        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setContentType("image/jpeg");
        // 存储文件到Minio服务中
        minioClient.putObject(bucketName, fileName, inputStream, metadata);
        return "upload success";
    }
}

以上代码中,我们首先注入了MinioClient对象,然后使用putObject方法将文件上传到Minio服务中。

5. 下载文件

下载文件也有多种方式,例如使用getObject、使用getObjectUrl等方法。下面我们以getObject方法为例:

@RestController
@RequestMapping("/file")
public class FileController {

    @Autowired
    private MinioClient minioClient;

    @Value("${spring.minio.bucket-name}")
    private String bucketName;

    @GetMapping("/{fileName}")
    public void download(@PathVariable String fileName, HttpServletResponse response) throws Exception {
        // 从Minio服务中获取文件流
        InputStream inputStream = minioClient.getObject(bucketName, fileName);
        // 设置Content-Disposition为attachment(以附件形式下载文件)
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
        // 将文件流复制到response的输出流中
        IOUtils.copy(inputStream, response.getOutputStream());
        response.flushBuffer();
    }
}

以上代码中,我们首先注入了MinioClient对象,然后使用getObject方法从Minio服务中获取文件流,最后将文件流复制到response的输出流中,供客户端下载文件。

通过以上步骤,我们就可以使用Springboot集成Minio实现文件存储的实现代码了。

本文链接:http://task.lmcjl.com/news/7694.html

展开阅读全文