Symfony 4 - API для управления загрузкой нескольких файлов (без пакета) - PullRequest
0 голосов
/ 25 сентября 2019

Я создаю API с Symfony 4 без пакета API.Я создаю все мои конечные точки вручную, все работает нормально.Моя проблема, когда я пытаюсь загрузить несколько файлов.У меня есть объект с полем изображений, где мне нужно, чтобы пользователь загружал несколько файлов.Проблема в том, что я не могу получить файлы, я получаю только ОДИН файл.

Вот поле моей сущности, это тип массива, я не знаю, является ли это лучшей практикой:

/**
 * @ORM\Column(type="array")
 * @OA\Property(type="array")
 * @Groups("main")
 */
private $pictures = [];

В моем контроллере я пытаюсь считать файлы (только для тестирования), но у меня всегда есть 1 файл:

$files = $request->files;
    return $this->json(count($files)); // result 1

Завиток, используемый для получения этого результата:

curl -H "Authorization: Bearer MY_TOKEN" -F "pictures=@PATH_TO_FILE\4b737fac533294776e386a3469e84e16.png" -F "pictures=@PATH_TO_FILE\azekh1454621e54516ze321a511z6259.png" http://127.0.0.1:8000/api/incidents/

add

Я тоже пробовал с почтальоном, тот же результат.Это мой первый API, я немного потерян!Я перепробовал много всего, все не удалось: (

Кто-нибудь может дать мне подсказку, чтобы найти решение, пожалуйста?

Спасибо !!

1 Ответ

0 голосов
/ 25 сентября 2019

Как и с любым другим предоставленным параметром запроса, несколько экземпляров одного и того же параметра обычно перекрывают друг друга:

https://example.org/?param=1&param=2

будет преобразовано в

['param' => 2] // in $_REQUEST or whatever

так, отправка двух файлов с pictures=... постигнет та же участь.

, чтобы решить эту проблему, php понимает синтаксис []:

https://example.org/?param[]=1&param[]=2

будет преобразован в

['param' => [1,2]] 

, поэтому для скручивания достаточно превратить pictures=... в pictures[]=....

Файлы могут передаваться различными способами.PHP имеет несколько ловушек, например, он будет принимать файлы только при отправке как multipart/form-data ( source ), что приводит к проблеме почтальона, которая, по-видимому, по умолчанию отправляет файлы по-другому, и вы должны установить этоиначе, см. следующий вопрос SO для некоторых подсказок:

Загрузка изображения через HTTP POST с почтальоном

...