Качване на няколко файла в Symfony Backend ръчно (без формуляр)

Изправен съм пред проблем при опит да изпратя множество файлове от ReactJS приложение към Symfony Backend.

Качвам два файла, но само единият се вижда в задната част на Symfony.

Данните се изпращат от ReactJS dropzone, добре проверих дали двата файла се изпращат чрез formData, добре използвах 'content-type': 'multipart/form-data', за да публикувам данните.

В раздела Newtwork на Chrome подробностите за данните на формуляра показват, че два файла са добре прикачени към заявката:

------WebKitFormBoundaryTif9sihCtI30UXXS Съдържание-разпределение: формуляр-данни; име=файл; filename=glacier-583419_960_720.jpg Content-Type: изображение/jpeg

------WebKitFormBoundaryTif9sihCtI30UXXS Съдържание-разпределение: формуляр-данни; име=файл; filename=image-ile.jpg Content-Type: 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 Съдържание-разпределение: формуляр-данни; име=файл; filename=glacier-583419_960_720.jpg Content-Type: изображение/jpeg

------WebKitFormBoundaryTif9sihCtI30UXXS Съдържание-разпределение: формуляр-данни; име=файл; filename=image-ile.jpg Content-Type: 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