将未知大小的文件上传到S3的最佳策略

时间:2019-02-13 18:03:50

标签: java scala amazon-s3 concurrency io

我有一个服务器端应用程序,该应用程序运行大量图像URL,并将图像从这些URL上传到S3。 这些文件通过HTTP提供。我使用InputStream方法从HttpURLConnection获得的getInputStream下载它们。我将InputStream交给AWS S3 Client putObject方法(AWS Java SDK v1),以将流上传到S3。到目前为止一切顺利。

我正在尝试引入新的外部图像数据源。此数据源的问题在于,为这些图像提供服务的HTTP服务器没有返回Content-Length HTTP标头。这意味着我无法确定图像的字节数,这是AWS S3客户端验证图像是否已从流正确上传到S3所需的数字。

我认为可以解决此问题的唯一方法是让服务器所有者将Content-Length HTTP标头添加到响应中(不太可能),或者先将文件下载到内存缓冲区然后上传从那里到S3。

这些不是大文件,但我有很多。

在考虑首先下载文件时,我担心内存占用和并发性(无法同时上传和下载同一文件的大块)。

由于我正在处理许多小文件,因此我怀疑如果我关注多个文件(而不是单个文件)的并发性,并发性问题可能会“解决”。因此,与同时下载和上传同一文件的块不同,我将使用IO有效地下载一个文件,同时上传另一个文件。

我希望您能就如何做到这一点,最佳实践,陷阱或任何其他有关如何最好地解决此问题的想法提供意见。

0 个答案:

没有答案