Каков наилучший способ загрузки файлов в службу хранения? (Amazon S3 или EdgeCast)

У нас есть веб-приложение, которое должно хранить загруженные изображения с помощью EdgeCast или Amazon S3. Для этого нам нужно сначала загрузить эти изображения в EdgeCast / S3. Есть несколько вариантов, которые я могу придумать:

  1. Выполните повторную загрузку встроенного скручивания, чтобы загрузить изображение с помощью требуемого API EdgeCast / S3. Недостатком является то, что при одновременной загрузке нагрузка на сервер будет огромной.
  2. Очередь повторных загрузок. Я знаю, что это возможно, но я не знаю, как это сделать.
  3. Не беспокойтесь о повторной загрузке и загрузите непосредственно в EdgeCast / S3 со стороны клиента.
  4. Смонтируйте FTP-сервер EdgeCast / S3 в файловую систему, а затем просто скопируйте загруженные файлы, а демон FTP сделает все остальное.

Какое решение является лучшим, и есть ли другие? Я подозреваю, что это либо 1, либо 2.

Изменить: мое приложение на PHP

4 ответа

Решение

Не уверен насчет EdgeCast, но я знаю, что в Amazon S3 лучший способ сделать это - отправить файл напрямую на файловый сервер. См. http://doc.s3.amazonaws.com/proposals/post.html

Делая это таким образом, вы предоставляете HTML-форму с некоторыми полями, такими как идентификатор папки, имя файла, открытый ключ, временная метка и т. Д., Чтобы гарантировать, что она безопасна, и только вы можете загрузить ее на сервер. Сервер будет перенаправлять свой браузер, как только загрузка будет завершена с той страницы, которую они перенаправили на вас, может проверить строку запроса, чтобы выяснить, была ли загрузка успешной или нет, а затем записать FileID в вашу БД.

Прекрасно работает для снижения нагрузки на ваш сервер и ускоряет работу пользователя, однако может привести к появлению потерянных файлов, если загрузка прошла успешно, но вставка в БД не удалась.

Хранилище EdgeCast поддерживает конфигурацию Rsync/sFTP для автоматической синхронизации содержимого с сервера хранилища. EdgeCast также поддерживает конфигурацию "обратный прокси-сервер" или "клиентское происхождение" для автоматической загрузки содержимого с другого веб-сервера в кэш. Вы можете использовать S3 в качестве этого места происхождения клиента или использовать собственную службу EdgeCast Cloud Storage или любой другой веб-сервер вне сети EdgeCast.

Я загружаю файлы во временный каталог, а затем запускаю скрипт cron, который помещает файлы в AWS, чтобы конечный пользователь больше не занимал процесс загрузки.

AWS предоставляет SDK для PHP, чтобы сделать это. Он даже поддерживает загрузку из нескольких частей, что является отличной новостью для разработчиков.

Следует отметить, что AWS SDK для PHP также будет выполнять логику повторных попыток и (если вы используете Multipart, что вам следует) может возобновить неудачные загрузки.

Другие вопросы по тегам