(Я новичок в Amazon AWS / S3, поэтому, пожалуйста, несите меня)
Моя конечная цель – позволить моим пользователям загружать файлы на S3 с помощью своего веб-браузера, моими требованиями являются:
Мой вопрос из двух частей:
Возможно ли это сделать для больших файлов? Если да, то как?
Если можно загрузить непосредственно на S3, как я могу обрабатывать паузу / возобновление?
PS. Я использую PHP 5.2+
В то же время доступный AWS SDK для JavaScript (в браузере) поддерживает Amazon S3, включая класс ManagedUpload для поддержки многостраничных аспектов загрузки используемого варианта (подробнее см. Предыдущее обновление). Теперь это может быть лучшим решением для вашего сценария, см., Например, « Загрузка локального файла с помощью API файлов» для краткого примера, в котором, в свою очередь, используется API файлов HTML5 – вводное сообщение в блоге. Объявление управляемого загрузчика Amazon S3 в SDK SDK для JavaScript предоставляет более подробную информацию об этой функции SDK.
Мой первоначальный ответ, по-видимому, пропустил главное, поэтому уточнить:
Если вы хотите выполнять загрузку на основе браузера через простые HTML-формы, вам ограничено использование операции POST Object , которая добавляет объект в указанный ведро с использованием HTML-форм :
POST – это альтернативная форма PUT, которая позволяет загрузке на основе браузера как способ размещения объектов в ведрах. Параметры, которые передаются в PUT через HTTP-заголовки, вместо этого передаются как поля формы в POST в теле сообщения с кодировкой multipart / form-data. […]
Загрузка осуществляется в одной операции здесь, поэтому не поддерживает приостановку / возобновление и ограничивает исходный максимальный размер объекта 5 гигабайт (ГБ) или меньше .
Вы можете преодолеть оба ограничения, используя вместо этого API REST для загрузки Multipart , который, в свою очередь, используется SDK, например AWS SDK для PHP, для реализации этой функции.
Для этого, очевидно, требуется сервер (например, на EC2) для обработки операции, инициированной через браузер (что также позволяет вам легко упростить правила для векторов S3 и / или политики IAM для управления доступом).
В качестве альтернативы можно использовать библиотеку JavaScript и выполнить эту клиентскую сторону, например, выполнить загрузку jQuery Upload и загрузить файл AJAX для исходного указателя. К сожалению, нет никакого канонического JavaScript SDK для AWS ( aws-lib на удивление даже не поддерживает S3 еще) – видимо, некоторые вилки knox добавили многостраничную загрузку, см., Например , вилку slakis , я не использовал ни один из них для использования случай под рукой, хотя.
Если можно загрузить [большие файлы] прямо на S3, как я могу обрабатывать паузу / возобновление?
AWS SDK для PHP поддерживает загрузку больших файлов в Amazon S3 с помощью низкоуровневого PHP API для Multipart Upload :
AWS SDK для PHP предоставляет низкоуровневый API, который очень похож на API REST Amazon S3 для многостраничной загрузки (см. Использование REST API для многопользовательской загрузки). Используйте API низкого уровня, когда вам нужно приостановить и возобновить многостраничные загрузки, изменить размеры деталей во время загрузки или заранее не знать размер данных . Используйте API высокого уровня (см. Использование высокоуровневого PHP API для многопользовательской загрузки), когда у вас нет этих требований. [внимание мое]
Amazon S3 может обрабатывать объекты от 1 байта до 5 терабайт (TB) , см. Соответствующий вводный пост Amazon S3 – ограничение размера объекта теперь 5 TB :
[…] Теперь клиенты могут хранить чрезвычайно большие файлы в виде отдельных объектов, что значительно упрощает их хранение. Amazon S3 делает бухгалтерию за кулисами для наших клиентов, поэтому теперь вы можете ПОЛУЧИТЬ этот большой объект, как и любой другой объект Amazon S3.
Чтобы хранить большие объекты, вы должны использовать новый API загрузки Multipart, о котором я писал в прошлом месяце, чтобы загрузить объект по частям. […]
Я не знаю ни одного флеш-загрузчика, предлагающего что-либо более мощное, чем стандартная HTTP-почта, но вы могли бы разработать собственное программное обеспечение для флэш-памяти для клиента с координирующим программным обеспечением на сервере.