手动上传多个文件到 Symfony 后端(无表格)
Upload multiple files to Symfony Backend manually (without form)
我在尝试将多个文件从 ReactJS 应用程序发送到 Symfony 后端时遇到问题。
我上传了两个文件,但只有一个在我的 Symfony 后端可见。
数据是从 ReactJS dropzone 发送的,我仔细检查了这两个文件是通过 formData
发送的,我很好地使用了 'content-type': 'multipart/form-data'
到 post 数据。
在 Chrome Newtwork 选项卡中,表单数据详细信息显示两个文件已很好地附加到请求中:
------WebKitFormBoundaryTif9sihCtI30UXXS Content-Disposition: form-data; name="file"; filename="glacier-583419_960_720.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryTif9sihCtI30UXXS Content-Disposition: form-data; name="file"; 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"
]
}
如您所见,在“参数”中,只有一个文件存在,而不是两个。
有人遇到过这个问题吗?我不知道可能是什么问题?
我解决了我的问题,这很微不足道,但它可以帮助其他人将来阅读。
根据发送的表格数据中的指示:
------WebKitFormBoundaryTif9sihCtI30UXXS Content-Disposition: form-data; name="file"; filename="glacier-583419_960_720.jpg" Content-Type: image/jpeg
------WebKitFormBoundaryTif9sihCtI30UXXS Content-Disposition: form-data; name="file"; 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,而是来自前端应用程序,没有很好地格式化发送的数据。
我在尝试将多个文件从 ReactJS 应用程序发送到 Symfony 后端时遇到问题。
我上传了两个文件,但只有一个在我的 Symfony 后端可见。
数据是从 ReactJS dropzone 发送的,我仔细检查了这两个文件是通过 formData
发送的,我很好地使用了 'content-type': 'multipart/form-data'
到 post 数据。
在 Chrome Newtwork 选项卡中,表单数据详细信息显示两个文件已很好地附加到请求中:
------WebKitFormBoundaryTif9sihCtI30UXXS Content-Disposition: form-data; name="file"; filename="glacier-583419_960_720.jpg" Content-Type: image/jpeg
------WebKitFormBoundaryTif9sihCtI30UXXS Content-Disposition: form-data; name="file"; 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"
]
}
如您所见,在“参数”中,只有一个文件存在,而不是两个。
有人遇到过这个问题吗?我不知道可能是什么问题?
我解决了我的问题,这很微不足道,但它可以帮助其他人将来阅读。
根据发送的表格数据中的指示:
------WebKitFormBoundaryTif9sihCtI30UXXS Content-Disposition: form-data; name="file"; filename="glacier-583419_960_720.jpg" Content-Type: image/jpeg
------WebKitFormBoundaryTif9sihCtI30UXXS Content-Disposition: form-data; name="file"; 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,而是来自前端应用程序,没有很好地格式化发送的数据。