springboot 传入Respons minio 文件分片下载工具类
时间: 2024-01-18 08:28:56 浏览: 156
你可以使用 Spring Boot 来实现一个接收 HTTP 请求,并使用 MinIO 完成文件的分片下载。下面是一个示例代码:
```java
import io.minio.MinioClient;
import io.minio.errors.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
@RestController
@RequestMapping("/download")
public class MinioDownloadController {
@Value("${minio.accessKey}")
private String accessKey;
@Value("${minio.secretKey}")
private String secretKey;
@Value("${minio.endpoint}")
private String endpoint;
@GetMapping("/{bucketName}/{objectName}")
public ResponseEntity<InputStreamResource> downloadFile(@PathVariable String bucketName,
@PathVariable String objectName,
HttpServletRequest request,
HttpServletResponse response) {
try {
MinioClient minioClient = new MinioClient(endpoint, accessKey, secretKey);
String contentType = minioClient.statObject(bucketName, objectName).contentType();
response.setContentType(contentType);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + objectName + "\"");
minioClient.getObject(bucketName, objectName)
.forEach(d -> {
try {
response.getOutputStream().write(d);
} catch (IOException e) {
e.printStackTrace();
}
});
response.flushBuffer();
} catch (InvalidEndpointException | InvalidPortException | InvalidBucketNameException
| NoSuchAlgorithmException | InsufficientDataException | IOException
| InvalidKeyException | NoResponseException | ErrorResponseException
| InternalException | InvalidArgumentException e) {
e.printStackTrace();
}
return new ResponseEntity<>(HttpStatus.OK);
}
}
```
在上述代码中,你需要在 Spring Boot 的配置文件中添加以下配置:
```properties
minio.accessKey=your-access-key
minio.secretKey=your-secret-key
minio.endpoint=your-minio-endpoint
```
然后,你可以在 `MinioDownloadController` 类中创建一个路由为 `/download/{bucketName}/{objectName}` 的接口来处理下载请求。该接口会根据传入的 `bucketName` 和 `objectName` 参数从 MinIO 中获取文件,并将文件流写入响应的输出流中,从而实现文件的分片下载。
希望这个示例对你有帮助!如果你有任何其他问题,请随时提问。
阅读全文