使用 multipart/form-data 清空 $request->request 和 $request->files
Empty $request->request and $request->files with multipart/form-data
我正在尝试使用 AJAX 将带有文件的表单上传到我的服务器,但 Symfony 没有按应有的方式解析请求正文。这是我的 PHP:
#[Route('/api/upload/file', name: "api_upload_file", methods: ['POST'])]
public function create(Request $request): JsonResponse
{
dump($request->files->all());
dump($request->request->all());
dump($request->getContent());
...
和转储输出(文件部分被删掉,因为它需要很多space):
[]
[]
"""
------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="subcategory"
1
------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="main_image"; filename=""
Content-Type: application/octet-stream
------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="more_images"; filename=""
Content-Type: application/octet-stream
------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="original_version"
------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="version"
------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="original_title"
------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="title"
"""
明明请求通过了,不明白为什么内容没有解析
以防万一,这是 javascript 部分:(这看起来像 JQuery 但不是)
form.submit(e => {
e.preventDefault();
let formData = createItemForm.formData();
$.ajax('/api/upload/file', {
headers: {
'Content-Type': 'multipart/form-data'
},
body: formData
})
.then(data => data.json())
.then(json => {
console.log('uploaded');
});
});
如何获取 $request->files 和 $request->request 中的文件和表单值?
在尝试发出这样的多部分请求时,请勿自行指定 Content-Type
header。 header 需要包含边界值(以便接收方知道如何解析此请求)- 如果您自己指定它,如 multipart/form-data
,那么它将丢失。
这些请求库通常知道如何根据您传入的 FormData 实例自行正确设置它。
我正在尝试使用 AJAX 将带有文件的表单上传到我的服务器,但 Symfony 没有按应有的方式解析请求正文。这是我的 PHP:
#[Route('/api/upload/file', name: "api_upload_file", methods: ['POST'])]
public function create(Request $request): JsonResponse
{
dump($request->files->all());
dump($request->request->all());
dump($request->getContent());
...
和转储输出(文件部分被删掉,因为它需要很多space):
[]
[]
"""
------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="subcategory"
1
------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="main_image"; filename=""
Content-Type: application/octet-stream
------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="more_images"; filename=""
Content-Type: application/octet-stream
------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="original_version"
------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="version"
------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="original_title"
------WebKitFormBoundaryh4t0I09h9iTRNGme
Content-Disposition: form-data; name="title"
"""
明明请求通过了,不明白为什么内容没有解析
以防万一,这是 javascript 部分:(这看起来像 JQuery 但不是)
form.submit(e => {
e.preventDefault();
let formData = createItemForm.formData();
$.ajax('/api/upload/file', {
headers: {
'Content-Type': 'multipart/form-data'
},
body: formData
})
.then(data => data.json())
.then(json => {
console.log('uploaded');
});
});
如何获取 $request->files 和 $request->request 中的文件和表单值?
在尝试发出这样的多部分请求时,请勿自行指定 Content-Type
header。 header 需要包含边界值(以便接收方知道如何解析此请求)- 如果您自己指定它,如 multipart/form-data
,那么它将丢失。
这些请求库通常知道如何根据您传入的 FormData 实例自行正确设置它。