Лучшая стратегия для загрузки файлов с неизвестным размером на S3 - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть серверное приложение, которое запускает большое количество 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 для эффективной загрузки одного файла при загрузке другого.

Мне бы очень понравились ваши идеи о том, как это сделать, лучшие практики, подводные камни или любые другиеподумал, как лучше всего решить эту проблему.

...