Подтвердить что ты не робот

Загрузите 1GB файлы, используя chunking в PHP

У меня есть веб-приложение, которое допускает загрузку файлов объемом до 4 МБ. Серверная сторона script - это PHP, а веб-сервер - NGINX. Многие пользователи просили резко увеличить этот предел, чтобы разрешить загрузку видео и т.д.

Однако для этой проблемы с PHP не существует простого решения. Во-первых, на стороне клиента я ищу что-то, что позволило бы мне порвать файлы во время передачи. SWFUpload, похоже, не делает этого. Думаю, я могу передавать потоки с помощью Java FX (http://blogs.oracle.com/rakeshmenonp/entry/javafx_upload_file), но я не могу найти эквивалент request.getInputStream в PHP.

Увеличение ограничений браузера client_post или загрузки php.ini или max_execution не является действительно решением для действительно больших файлов (~ 1 ГБ), потому что, возможно, браузер отключится и подумает обо всех этих блоках, хранящихся в памяти.

Есть ли способ решить эту проблему с помощью PHP на стороне сервера? Буду признателен за ваши ответы.

4b9b3361

Ответ 1

plupload - это библиотека javascript/php, и она довольно проста в использовании и позволяет блокировать.

Он использует HTML5.

Ответ 2

", но я не могу найти эквивалент request.getInputStream в PHP.

fopen('php://input'); возможно?

Ответ 3

Я создал клиент JavaFX для отправки больших файлов в куски максимального размера сообщения (я использую 2 МБ) и приемника PHP script для сборки кусков в исходный файл. Я выпускаю код под лицензией apache здесь: http://code.google.com/p/gigaupload/ Не стесняйтесь использовать/изменять/распространять.

Ответ 4

Попробуйте использовать bigupload script. Это очень легко интегрировать и может загружать до 2 Гб в кусках. Размер куска настраивается.

Ответ 5

Взгляните на протокол tus, который является протоколом на основе HTTP для возобновляемых загрузок файлов, чтобы вы могли продолжать работу, когда вы остановились, без повторной загрузки всего данных в случае каких-либо перерывов. Этот протокол также был принят vimeo с мая 2017 года.

Вы можете найти различные реализации протокола на различных языках здесь. В вашем случае вы можете использовать свой javascript-клиент с именем uppy и использовать серверную реализацию golang или php на сервере.

Ответ 7

Вы можете определенно написать веб-приложение, которое будет принимать блок данных (даже через POST), а затем добавить этот блок данных в файл. Мне кажется, что вам нужно какое-то приложение на стороне клиента, которое возьмет файл и разбивает его на куски, а затем отправит его на ваш веб-сервис за один кусок за раз. Тем не менее, кажется, что намного проще создать каталог sftp и позволить клиентам просто загружать файлы с использованием уже существующего клиентского приложения.

Ответ 8

Я думаю, создаю сокеты между серверами и клиентом и отправляю данные в куски!.. программирование на низком уровне, по-видимому, является решением. Возможно, это не ставки