Lumen 没有收到来自发送的表单数据的任何文件

Lumen does not receive any file from Form Data that was sent

我检查了 chrome Headers 发送的表单数据,看起来像这样:

现在我的 POST 请求中似乎有一个名为 "files" 的图像文件。

现在在 Lumen 的控制器中,我进行以下调试以尝试获取文件:

return response([$request->hasFile('files'), $request->file('files'), $request->get('files')]);

但是我在响应中得到的是:

[true,{},null]

这是我在我的 React 应用程序中提出的请求:

const formData  = new FormData();
formData.append("files", this.state.productData[key][0]);

        fetch(`${process.env.REACT_APP_API_URL}/products/submit`, {
            method: 'POST',
            body: formData,
        })

有谁知道我为获取图像所做的工作有什么问题吗?

$request->file() 方法 returns Illuminate\Http\UploadedFile class 的实例并在您的回复中显示为 {} 但您的文件已上传an 在 $request->hasFile()true 时有效,因此您可以像这样检索其属性:

if ($request->hasFile('files')) {
    $files = $request->file('files');

    return response()->json([
        'path' => $files->path(),
        'name' => $files->getClientOriginalName(),
        'size' => $files->getSize()
    ]);
}

或者,如果您想以文件形式获得响应:

if ($request->hasFile('files')) {
    return response()->file(
        $request->file('files')->path()
    );
}

请参阅 Laravel 文档 retrieving and storing uploaded files

注意:我建议使用 files 以外的名称,因为 $request->filesSymfony\Component\HttpFoundation\FileBag class 的一个实例,当您想使用时会导致冲突$request->files 作为 $request->file('files') 的 shorthand。