Intereting Posts
извлекать теги (слова) из цельной строки Как вернуть код HTTP 500 при любой ошибке, независимо от того, что как проверить, зарегистрирован ли пользователь на его сеансе в маршруте, а затем вызвать метод контроллера в laravel? Проблема PHP PDO с дезинфицированными полями ORDER BY Какие фреймворки PHP НЕ используют фронтальный контроллер? Нужно руководство для начала с Zend ACL избегая для каждой строки в mysql Переадресация категории Magento отключает запрос URL-адреса Как я могу получить PHP simplexml для сохранения <as self вместо & lt; Как конвертировать дату из одного формата в другой php Mysql Группирование и упорядочение пользовательских сообщений вместе перейдите на следующую страницу Лак: как отдельно кешировать страницы на основе значения определенного файла cookie строка в массив, разделенная на одиночные и двойные кавычки Отображение данных MySQL с помощью php

Загрузка больших файлов на S3 с поддержкой резюме

(Я новичок в Amazon AWS / S3, поэтому, пожалуйста, несите меня)

Моя конечная цель – позволить моим пользователям загружать файлы на S3 с помощью своего веб-браузера, моими требованиями являются:

  1. Я должен обрабатывать большие файлы (2 ГБ +)
  2. Я должен поддерживать паузу / резюме с индикатором прогресса
  3. (Необязательно, но желательно!) Возможность возобновить загрузку, если соединение временно выпадает

Мой вопрос из двух частей:

  • Я читал о многостраничной загрузке S3, но неясно, как я могу реализовать паузу / резюме для загрузок на основе веб-браузера.

Возможно ли это сделать для больших файлов? Если да, то как?

  • Должен ли я загружать файлы в EC2, а затем переместить их на S3, как только закончите? Могу ли я (безопасно) загружать файлы непосредственно на S3 вместо использования темпа. веб сервер?

Если можно загрузить непосредственно на S3, как я могу обрабатывать паузу / возобновление?

PS. Я использую PHP 5.2+

    Обновление 20150527

    В то же время доступный AWS SDK для JavaScript (в браузере) поддерживает Amazon S3, включая класс ManagedUpload для поддержки многостраничных аспектов загрузки используемого варианта (подробнее см. Предыдущее обновление). Теперь это может быть лучшим решением для вашего сценария, см., Например, « Загрузка локального файла с помощью API файлов» для краткого примера, в котором, в свою очередь, используется API файлов HTML5 – вводное сообщение в блоге. Объявление управляемого загрузчика Amazon S3 в SDK SDK для JavaScript предоставляет более подробную информацию об этой функции SDK.

    Обновление 20120412

    Мой первоначальный ответ, по-видимому, пропустил главное, поэтому уточнить:

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