Загрузка файлов с помощью multipart/form-data проста и хорошо работает большую часть времени, пока вы не сосредоточитесь на загрузке больших файлов. Если мы внимательно посмотрим, что происходит во время загрузки файла:
клиент отправляет запрос POST с содержимым файла в BODY
веб-сервер принимает запрос и инициирует передачу данных (или возвращает ошибку 413, если размер файла превышает лимит)
веб-сервер начинает заполнять буферы (зависит от размера файла и буферов), сохранять их на диске и отправлять через сокет/сеть на сервер
серверная часть проверяет аутентификацию (посмотрите, как только файл будет загружен)
серверная часть читает файл и вырезает несколько заголовков Content-Disposition, Content-Type, снова сохраняет его на диске серверная часть выполняет все, что вам нужно сделать с файлом
Чтобы избежать таких накладных расходов, мы выгружаем файл на диск (Nginx client_body_in_file_only) и управляем обратным вызовом, который будет отправлен дальше по линии. Затем работник очереди берет файл и делает то, что требуется. Это работает для межсерверной связи довольно гладко, но нам нужно решить аналогичную проблему с загрузкой на стороне клиента.
У нас также есть решение для загрузки S3 на стороне клиента. Никакого внутреннего взаимодействия не происходит. Для загрузки видео мы конвертируем видео в формат h.264 Baseline / AAC с помощью Zencoder.
В настоящее время мы используем модифицированный загрузчик Flash на основе s3-swf-upload-plugin с комбинацией Zencoder JS SDK, который действительно эффективен, но использует Flash.
Вопрос. Как достичь той же цели с помощью загрузчика файлов HTML5? Filepicker.io и Zencoder решают проблему? Каков рекомендуемый способ управления загрузкой файла HTML5 без взаимодействия с серверной частью?
Требования следующие:
- HTML5, а не флеш
- загружать видео с постобработкой, чтобы сделать его совместимым с проигрывателями HTML5 и мобильными устройствами
- загружать изображения с постобработкой (изменение размера, обрезка, поворот)
- для загрузки документов, таких как PDF, с функцией предварительного просмотра
Хорошо ли работает https://www.filepicker.com?
client_body_in_file_only
к большему количеству обращений к диску и, следовательно, к снижению производительности? В документах Nginx говорится, что его следует использовать в первую очередь для отладки. - person aergistal   schedule 27.08.2015