amazon-s3 - S3 下载 pdf - REST API
问题描述
我正在尝试使用 Spring Boot Rest API 为我存储在 S3 上的 PDF 之一提供服务。
以下是我的代码:
byte[] targetArray = null;
InputStream is = null;
S3Object object = s3Client
.getObject(new GetObjectRequest("S3_BUCKET_NAME", "prefixUrl"));
InputStream objectData = object.getObjectContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(objectData));
char[] charArray = new char[8 * 1024];
StringBuilder builder = new StringBuilder();
int numCharsRead;
while ((numCharsRead = reader.read(charArray, 0, charArray.length)) != -1) {
builder.append(charArray, 0, numCharsRead);
}
reader.close();
objectData.close();
object.close();
targetArray = builder.toString().getBytes();
is = new ByteArrayInputStream(targetArray);
return ResponseEntity.ok().contentLength(targetArray.length).contentType(MediaType.APPLICATION_PDF)
.cacheControl(CacheControl.noCache()).header("Content-Disposition", "attachment; filename=" + "testing.pdf")
.body(new InputStreamResource(is));
当我使用邮递员访问我的 API 时,我可以下载 PDF 文件,但问题是它完全是空白的。可能是什么问题?
S3 流式传输数据并且不保留缓冲区,并且数据是二进制( PDF ),因此如何将此类数据提供给使用 Rest API。
如何解决这个问题?
解决方案
遵循简单的代码应该对您有用,不确定您为什么要尝试将字符转换为字节,反之亦然?试试这个,效果很好。邮递员/浏览器。
@GET
@RequestMapping("/document")
@Consumes(MediaType.APPLICATION_OCTET_STREAM)
@Produces("application/pdf")
public ResponseEntity<InputStreamResource> getDocument() throws IOException {
final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();
S3Object object = s3.getObject("BUCKET-NAME", "DOCUMENT-URL");
S3ObjectInputStream s3is = object.getObjectContent();
return ResponseEntity.ok()
.contentType(org.springframework.http.MediaType.APPLICATION_PDF)
.cacheControl(CacheControl.noCache())
.header("Content-Disposition", "attachment; filename=" + "testing.pdf")
.body(new InputStreamResource(s3is));
}
推荐阅读
- bazel - 使用 Bazel 构建 Drake_last_sha_with_original_matlab Atlas 时出现问题
- json - 赛普拉斯 REST 调用 - 如何处理 JSON 响应正文中的字段?
- c - 1 字刽子手代码,无重复字母(业余)。错误是,它不需要比较第一个字母,我不知道为什么。想知道为什么?
- scala - 来自文本文件 java.lang.NumberFormatException 的 scala RDD:对于输入字符串:“0.5312”
- python - 定义 CNN 模型的架构
- python - 使用什么类型的 Qt 图表来创建此图像中的图表
- c# - 使用 CsvHelper 将 csv 文件转换为 excel 时减少内存
- xamarin.forms - Xamarin 表单中的显示卡
- javascript - 如何(动态)将元素添加到
- excel - EXCEL如何动态更改文件名