清空 $request->request 和 $request->带有 multipart/form-data 的文件

Pet*_*uib 2 php ajax symfony php-8 symfony6

我正在尝试使用 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());
...
Run Code Online (Sandbox Code Playgroud)

和转储输出(文件部分被删除,因为它占用大量空间):

[]
Run Code Online (Sandbox Code Playgroud)
[]
Run Code Online (Sandbox Code Playgroud)
"""
------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"
"""
Run Code Online (Sandbox Code Playgroud)

请求显然通过了,所以我不明白为什么内容没有被解析

以防万一,这里是 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');
            });
});
Run Code Online (Sandbox Code Playgroud)

我应该如何获取 $request->files 和 $request->request 中的文件和表单值?

CBr*_*roe 6

Content-Type当尝试发出此类多部分请求时,请勿自己指定标头。该标头需要包含边界值(以便接收者知道如何解析此请求) - 如果您自己指定它,如multipart/form-data,那么它将丢失。

这些请求库通常知道如何根据您传入的 FormData 实例正确地自行设置它。