提问人:polo 提问时间:2/14/2019 最后编辑:polo 更新时间:12/4/2022 访问量:2700
将未知大小的文件上传到 S3 的最佳策略
Best strategy to upload files with unknown size to S3
问:
我有一个服务器端应用程序,它通过大量图像 URL 运行,并将这些 URL 中的图像上传到 S3。
这些文件通过 HTTP 提供。我使用我从使用方法获得的下载它们。我将 InputStream 交给 AWS S3 客户端方法 (AWS Java 开发工具包 v1) 以将流上传到 S3。目前为止,一切都好。InputStream
HttpURLConnection
getInputStream
putObject
我正在尝试引入新的外部图像数据源。此数据源的问题在于,提供这些图像的 HTTP 服务器不返回 HTTP 标头。这意味着我无法判断图像将是多少字节,这是 AWS S3 客户端验证图像是否正确从流上传到 S3 所需的数字。Content-Length
我能想到的处理这个问题的唯一方法是让服务器所有者将 HTTP 标头添加到他们的响应中(不太可能),或者先将文件下载到内存缓冲区,然后从那里将其上传到 S3。Content-Length
这些不是大文件,但我有很多。
在考虑先下载文件时,我担心内存占用和并发影响(无法同时上传和下载同一文件的块)。
由于我正在处理许多小文件,因此我怀疑如果我专注于多个文件而不是单个文件的并发性,并发问题可能会“解决”。因此,我不会同时下载和上传同一文件的块,而是使用我的 IO 有效地下载一个文件,同时上传另一个文件。
我很想听听你关于如何做到这一点的想法,最佳实践,陷阱或任何其他关于如何最好地解决这个问题的想法。
答: 暂无答案
评论
putObject
JavaDoc 指出,“如果调用方没有提供 [内容长度],库将尽最大努力通过将输入流的内容缓冲到内存中来计算内容长度”。您是否尝试不指定长度?