java - 使用 AWS SDK for Java 2.x 将大文件上传到 S3 时内存不足
问题描述
我有一个 Java 11 Coretto lambda 函数,我从 S3 下载文件,压缩它们并将 zip 文件上传到另一个 S3 存储桶。这适用于使用TransferManager的 AWS SDK 1.X ,但我试图不在我的项目中混合 V1 和 V2 AWS JAVA SDK 以保持干净并最大限度地减少依赖关系。
使用 V2 S3Client ( software.amazon.awssdk.services.s3 ) 并执行大型 zip 文件的putObject时,即使我提供 InputStream 并设置contentLength,我也会收到 OutOfMemory 错误,我认为这已经足够了以防止在开始上传之前将整个 zip 文件加载到内存中。
这是我在尝试上传大型 zip 文件(几场演出)时导致 OutOfMemory 错误的代码:
InputStream targetStream = new FileInputStream(zipFile);
PutObjectRequest request = PutObjectRequest.builder()
.bucket(zipBucket)
.key(zipFile.getName())
.contentType("application/zip")
.contentLength(zipFile.length())
.expires(expiration.toInstant()).build();
s3Client.putObject(request, RequestBody.fromInputStream(targetStream, zipFile.length()));
我究竟做错了什么?
解决方案
推荐阅读
- android - 共享元素转换在父片段和子片段之间不起作用(嵌套片段)
- html - 为什么 Thymeleaf 忽略这个三元组?
- python - 如何合并数据框并从函数返回合并的df?
- amazon-s3 - 通过 Cloudfront 获取请求期间出现 AWS s3 SignatureDoesNotMatch 错误
- java - 在 Android 上打开/关闭蓝牙时永久删除可发现性检查
- tooltip - 工具提示数据在 bqplot 折线图中显示为 NaN
- python - 如何通过 Python 客户端库为 Google BigQuery 设置现有表过期?
- amazon-web-services - 快照和阻止:如何在 AWS 中保持 EBS 备份/恢复的最低成本
- java - 使用 selenium java 滚动在子窗口中打开的 pdf 文件
- android - 如何在刷新时处理 SwipeRefreshLayout?