Загрузить несколько файлов в Symfony Backend вручную (без формы)

Я столкнулся с проблемой, пытаясь отправить несколько файлов из приложения ReactJS в серверную часть Symfony.

Я загружаю два файла, но только один отображается в моем бэкенде Symfony.

Данные отправляются из дропзоны ReactJS, я хорошо проверил, что два файла отправляются через formData, я хорошо использовал 'content-type': 'multipart/form-data' для публикации данных.

На вкладке Chrome Newtwork данные формы показывают, что к запросу хорошо прикреплены два файла:

------WebKitFormBoundaryTif9sihCtI30UXXS Content-Disposition: form-data; имя=файл; filename=glacier-583419_960_720.jpg Тип содержимого: image/jpeg

------WebKitFormBoundaryTif9sihCtI30UXXS Content-Disposition: form-data; имя=файл; имя_файла=image-ile.jpg Тип содержимого: image/jpeg

Тем не менее, в моем бэкэнде Symfony пакет параметров файла показывает только один файл:

return $request->files;

Серийный ответ:

{
    "parameters": {
        "file": {
            "test": false,
            "original_name": "glacier-583419_960_720.jpg",
            "mime_type": "image/jpeg",
            "error": 0
        }
    },
    "file_keys": [
        "error",
        "name",
        "size",
        "tmp_name",
        "type"
    ]
}

Как видите, в параметрах присутствует только один файл вместо двух.

Кто-нибудь уже сталкивался с этой проблемой? Я не понимаю, в чем может быть дело?


person Grégory C    schedule 16.11.2020    source источник


Ответы (1)


Я решил свою проблему, это было тривиально, но это может помочь кому-то еще для будущих чтений.

Как указано в отправленных данных формы:

------WebKitFormBoundaryTif9sihCtI30UXXS Content-Disposition: form-data; имя=файл; filename=glacier-583419_960_720.jpg Тип содержимого: image/jpeg

------WebKitFormBoundaryTif9sihCtI30UXXS Content-Disposition: form-data; имя=файл; имя_файла=image-ile.jpg Тип содержимого: image/jpeg

Каждый элемент, добавленный в данные формы, имел одинаковое значение name. Вот проблема:

var tempFormData = new FormData();
setFormData(acceptedFiles.map((file)=>{
   tempFormData.append('file', file);
}));

Исправленный код:

var tempFormData = new FormData();
setFormData(acceptedFiles.map((file)=>{
   tempFormData.append(file.name, file);
}));

Таким образом, ошибка исходила не от Symfony, а от внешнего приложения, которое плохо форматировало отправленные данные.

person Grégory C    schedule 16.11.2020