Выбора файлов? Загрузка больших файлов через HTML5 в S3 без бэкэнда
загрузка файлов с помощью multipart / form-data прямо вперед и работает хорошо большую часть времени, пока вы не начали фокусироваться на загрузке больших файлов. Если мы ... --1-->внимательно что происходит во время загрузки файла:
клиент отправляет запрос POST с содержимым файла в теле
веб-сервер принимает запрос и инициирует передачу данных (или возвращает ошибку 413 если размер файла превышает limit)
веб-сервер начинает заполнять буферы (зависит от размера файла и буферов), хранить его на диске и отправлять его через сокет/сеть на сервер
back-end проверяет аутентификацию (посмотрите, как только файл загружен)
back-end читает файл и сокращает несколько заголовков Content-Disposition, Content-Type, снова сохраняет его на диске back-end выполняет все, что вам нужно сделать с файл
чтобы избежать таких накладных расходов, мы сбрасываем файл на диск (nginx client_body_in_file_only) и управляем обратным вызовом, чтобы отправить дальше по линии. Затем работник очереди берет файл и делает то, что требуется. Он работает для межсерверной связи довольно гладко, но мы должны решить аналогичную проблему с загрузкой на стороне клиента.
У нас также есть клиентское решение для загрузки S3. Не происходит никакого взаимодействия. Для загрузки видео мы управляем видео для преобразования в формат h.264 Baseline / AAC с Zencoder.
В настоящее время мы используем модифицированный Flash uploader на основе s3-swf-загрузить-плагин с комбинацией ZENCODER JS SDK, которая действительно эффективна, но использует Flash.
вопрос. Как достичь той же цели с помощью HTML5 file uploader? Делает Filepicker.io и Zencoder решить проблему? Каков рекомендуемый способ управления загрузкой файлов HTML5 без взаимодействия с фоном?
требования следующее:
- HTML5, не flash
- для загрузки видео с последующей обработкой, чтобы сделать его совместимым с HTML5-плеерами и мобильными
- для загрузки изображений с последующей обработкой (изменение размера, обрезка, поворот)
- для загрузки документов, таких как PDF с функцией предварительного просмотра
делает https://www.filepicker.com Сделать хорошую работу?
3 ответов
требования следующие:
HTML5, а не flash
Filepicker теперь поддерживает полный отзывчивый виджет, который является чистым html и css.
для загрузки видео с последующей обработкой, чтобы сделать его совместимым с HTML5-плеерами и мобильными
Filepicker теперь предлагает возможность перекодировать большинство видеоформатов на h264 & webm для мобильных устройств воспроизведение. https://www.filepicker.com/documentation/file_processing/video_conversion/video
для загрузки изображений с последующей обработкой (изменение размера, обрезка, поворот)
Filepicker предлагает обрезку и поворот в новом виджете, а также изменение размера, заточку и водяные знаки через API.
для загрузки документов, таких как PDF с функцией предварительного просмотра
мы предлагаем возможность конвертирования из 19 разных файлов форматы различные форматы. https://www.filepicker.com/documentation/file_processing/document_conversion/document
Я использую filepicker в течение 2 лет, и, без сомнения, это стоит того. не пытайтесь управлять загрузкой файлов (с google Диска, из ios, с моей камеры, из dropbox...) Filepicker обрабатывает это очень хорошо и предоставляет вам готовый url-адрес. Потратьте больше времени на работу над своим основным бизнесом, загрузка файлов действительно легко делегировать
для загрузки больших файлов в S3 есть REST API для составной загрузки, который работает следующим образом
- инициировать отправку
- загрузить содержимое файла разделить на несколько запросов
- завершить загрузку
API также доступен для вызова из javascript, и загруженный файл можно разделить на несколько запросов с помощью файл/Blob slice API
единственная проблема в том, что возможность аутентификации на S3 из javascript вам нужно передать свои данные аутентификации. Это обычно решается некоторым промежуточным слоем, таким как PHP, поэтому данные аутентификации не хранятся в файлах javascript.
аналогичный вопрос на SO:HTML5 и Amazon S3 мульти-часть загрузки
редактировать
- операции с изображениями, такие как обрезка и изменение размера, могут выполняться canvas. Просто загрузите локальное изображение в элемент canvas, внесите необходимые изменения и затем вы можете генерировать поток данных изображений jpeg/png с помощью холст.toDataUrl метод.
- предварительный просмотр PDF возможен, есть в формате PDF.js lib, который может отображать локальный PDF-файл в холст
- AFAIK нет способа сделать преобразование видео на стороне клиента