尝试在后端使用 Laravel 上传文件时遇到问题。
问题
Laravel $request->file()
方法返回 null。
设置
我使用 superagent 建立了一个 AJAX 请求,调试了请求,一切似乎都很好。 Content-Length
根据我添加的图像而变化,表明图像已添加到请求中。 Content-Type
也设置为 multipart/form-data
。
// request headers
Content-Length:978599
Content-Type:multipart/form-data;
// request payload
Content-Disposition: form-data; name="files"; filename="item-keymoment.png"
Content-Type: image/png
但是我无法在 Laravel 中获取文件。使用 $request->file('files')
返回 NULL
,但是如果我调试 $_FILES
数组,我注意到我的文件已上传。
dd($request->file('files'))
// NULL
dd($_FILES);
// array:1 [
// "files" => array:5 [
// "name" => "item-keymoment.png"
// "type" => "image/png"
// "tmp_name" => "/tmp/phpipbeeM"
// "error" => 0
// "size" => 978274
// ]
// ]
dd($request->files->all())
// []
什么可能导致 Laravel 忽略该文件?
Content-Type
输入文件不是 application/octet-stream
?
下面已经回答了这个问题。
原文由 Renārs Vilnis 发布,翻译遵循 CC BY-SA 4.0 许可协议
注意到我在 Controller 方法中收到的
$request
对象是JsonRequest
的一个实例,它是一个扩展Illuminate\Http\Request
的自定义类( _现在为空_)。它被实现为:
但如果我改变:
我得到了所需的输入文件。现在切换
$request
的实例解决了我的问题我的子类
Illuminate\Http\Request
的意图是能够在$requests
上附加方法,以便以统一的方式处理 API 请求的异常/错误。例如在部署时显示异常消息,但在生产中返回固定消息。有不同/更好/更多的 Laravel 方式吗?
我认为只会创建一个 JsonController 而不是扩展请求。