Spring boot 结合s3做文件下载
时间: 2024-01-16 15:05:31 浏览: 141
要使用Spring Boot和AWS S3进行文件下载,您可以使用以下代码示例:
首先,您需要在pom.xml文件中添加Amazon S3 SDK依赖项:
```xml
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.11.1003</version>
</dependency>
```
然后,您可以使用以下代码从S3下载文件:
```java
@Autowired
private AmazonS3 amazonS3;
@RequestMapping(value = "/download", method = RequestMethod.GET)
public ResponseEntity<Object> downloadFile(@RequestParam String key) throws IOException {
S3Object s3Object = amazonS3.getObject("bucket-name", key);
S3ObjectInputStream inputStream = s3Object.getObjectContent();
byte[] bytes = IOUtils.toByteArray(inputStream);
String contentType = s3Object.getObjectMetadata().getContentType();
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Disposition", String.format("attachment; filename=\"%s\"", key));
headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
headers.add("Pragma", "no-cache");
headers.add("Expires", "0");
return ResponseEntity.ok()
.headers(headers)
.contentLength(bytes.length)
.contentType(MediaType.parseMediaType(contentType))
.body(new ByteArrayResource(bytes));
}
```
在这个例子中,我们使用 `AmazonS3` 类从S3中获取文件对象,并使用 `IOUtils` 类将文件内容转换成字节数组。然后,我们设置响应头并使用 `ResponseEntity` 返回文件内容。您需要将 "bucket-name" 替换为您自己的S3存储桶名称。
请注意,在使用S3时,您需要将访问密钥和密钥ID配置为环境变量或存储在一个安全的位置。
阅读全文