Помните, как работают веб-серверы.
Если вы не используете такую асинхронную веб-настройку, которую вы могли бы достичь с помощью Node.JS или Erlang (всего 2 примера), то каждый запрос на загрузку, который ваше веб-приложение обслуживает, связывает весь процесс или поток, пока файл загружается .
Представьте, что вы загружаете файл размером несколько мегабайт. Большинство интернет-пользователей не имеют чрезвычайно быстрых обратных ссылок, поэтому ваш веб-сервер тратит много времени, ничего не делая. Хотя он ничего не делает, он не может обслуживать любые другие запросы. Это означает, что ваши пользователи начинают получать длинные задержки и / или сообщения об ошибках от сервера. Это означает, что они начинают использовать какой-то другой сайт, чтобы сделать то же самое. Вы всегда можете запустить больше процессов и потоков, но каждый из них требует дополнительной памяти, что в конечном итоге означает дополнительные $.
Выполняя прямую загрузку на S3, помимо экономии пропускной способности, о которой упоминал Джастин Нисснер, и обходного пути Heroku, о котором говорил Томас Уотсон, вы позволяете Amazon беспокоиться об этой проблеме. У вас может быть однопроцессный веб-сервер, эффективно обрабатывающий очень большие загрузки, поскольку он передает эту реальную функциональность Amazon.
Так что, да, его сложнее настроить, и вам приходится обрабатывать обратные вызовы для отслеживания событий, но если вы имеете дело с чем-то, кроме действительно небольших файлов (и даже в этих случаях), зачем вам стоить больше денег?
Редактировать: исправление опечаток