загрузить файл api с uploadtask в symfony 2.8 - PullRequest
0 голосов
/ 02 мая 2019

Мы понимаем, что если мы хотим создать многоэлементный запрос, который содержит видеофайл 15 ГБ, невозможно выделить в памяти размер, необходимый для такого большого объема данных, большинство устройств имеют только 2 или 3 ГБ ОЗУ.

Поэтому абсолютно необходимо переключиться на метод uploadTask, который доставит на сервер содержимое файла блока максимального размера, разрешенного IP-пакетами, отправляемыми на сервер.

Этоэто метод POST.Однако он не содержит таких параметров, как идентификатор папки или имя файла.Таким образом, вам нужен способ передачи этих параметров.Лучший способ - это кодировать их в URL.

Я предложил формат кодирования в виде пути позади конечной точки API, но мы также можем очень хорошо кодировать эти два параметра классическим способом.URL, например:

/api/upload?id=123&filename=video.mp4

Из того, что я прочитал в Stackoverflow, с Symfony тривиально получить идентификатор и имя файла.Затем все данные, полученные в теле запроса POST, могут быть записаны в необработанном виде непосредственно в файл, без прохождения через буфер в памяти на стороне сервера.

Пользовательские данные обязательно должны быть потоковыми,будь то мобильная сторона или сторона сервера, а также загружать или скачивать.Загрузка пользовательского контента в память также очень опасна с точки зрения безопасности.

В Symfony, как я могу это сделать?

1 Ответ

0 голосов
/ 03 мая 2019

Это выходит далеко за пределы Symfony и зависит от используемого вами веб-сервера.

По умолчанию с apache / nginx и php вы получите уже буферизованный запрос, поэтому вы не можете передать его в файл.

Однако есть решения, например, с помощью Apache вы можете передавать запросы, см. http://hc.apache.org/httpclient-3.x/performance.html#Request_Response_entity_streaming

Возможно, у nginx также есть опции для этого, но я не знаю о них.

Другим вариантом могут быть веб-сокеты, см. http://en.wikipedia.org/wiki/WebSocket

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...