springboot 整合minio 实现多级目录下文件的下载
时间: 2024-01-18 19:09:57 浏览: 103
要实现Spring Boot整合MinIO实现多级目录下文件的下载,可以按照以下步骤进行:
1. 引入MinIO的依赖
在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.1.0</version>
</dependency>
```
2. 配置MinIO连接信息
在application.yml文件中添加以下配置信息:
```yaml
minio:
endpoint: http://localhost:9000 # MinIO服务地址
accessKey: minioadmin # 访问Key
secretKey: minioadmin # 访问Secret
bucketName: test-bucket # 存储桶名称
```
3. 创建MinIO客户端
创建MinIO客户端的代码如下:
```java
@Configuration
public class MinioConfig {
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.accessKey}")
private String accessKey;
@Value("${minio.secretKey}")
private String secretKey;
@Value("${minio.bucketName}")
private String bucketName;
@Bean
public MinioClient minioClient() throws InvalidPortException, InvalidEndpointException {
return MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey, secretKey)
.build();
}
@Bean
public String bucketName() {
return bucketName;
}
}
```
4. 实现文件下载接口
实现文件下载接口的代码如下:
```java
@RestController
@RequestMapping("/file")
public class FileController {
@Autowired
private MinioClient minioClient;
@Autowired
private String bucketName;
@GetMapping("/download")
public ResponseEntity<Resource> downloadFile(@RequestParam("path") String path) throws Exception {
String[] pathArr = path.split("/");
String objectName = pathArr[pathArr.length - 1];
String objectPath = path.substring(0, path.lastIndexOf("/") + 1);
InputStream inputStream = minioClient.getObject(GetObjectArgs.builder()
.bucket(bucketName)
.object(objectPath + objectName)
.build());
ByteArrayResource resource = new ByteArrayResource(inputStream.readAllBytes());
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + objectName + "\"")
.body(resource);
}
}
```
其中,`path`参数是要下载的文件路径,例如:`folder1/folder2/test.txt`。
5. 测试文件下载接口
启动应用程序后,访问`http://localhost:8080/file/download?path=folder1/folder2/test.txt`即可下载名为`test.txt`的文件,该文件位于MinIO存储桶的`folder1/folder2/`路径下。
阅读全文