在后台使用Laravel上传文件有困难。
问题
Laravel $request->file()
方法返回null。
设置
我使用超剂构建了一个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
下面的已经回答了这个问题.
发布于 2016-07-06 14:42:14
注意到我在Controller方法中接收到的$request
对象是JsonRequest
的一个实例,它是一个扩展Illuminate\Http\Request
的自定义类(目前为空)。
它的实施方式是:
<?php
namespace App\Http\Requests;
use Illuminate\Http\Request;
class JsonRequest extends Request {
}
但如果我改变了
// from
use App\Http\Requests\JsonRequest;
public function add_background_image (JsonRequest $request) {
dd($request->file('files'))
// NULL
}
// to
use Illuminate\Http\Request;
public function add_background_image (Request $request) {
dd($request->file('files'))
// UploadedFile {#266
// -test: false
// -originalName: "item-keymoment.png"
// -mimeType: "image/png"
// -size: 978274
// -error: 0
// ...
// }
}
我得到了所需的输入文件。现在,切换$request
实例解决了我的问题
但是我不明白为什么/如何用一个空类扩展
Illuminate\Http\Request
会破坏一些东西。 有人能解释一下吗?
我使用子类Illuminate\Http\Request
的目的是能够在$requests
上附加方法,以统一的方式处理异常/错误。例如,在部署时显示异常消息,但在生产中返回一条固定消息。
是否有不同的/更好的/更多的拉拉维尔方式来做到这一点?
我认为只需要创建一个JsonController,而不是扩展请求。
发布于 2018-03-08 11:46:54
您应该添加到表单标记enctype="multipart/form-data"
中。
例如:
<form method="POST" action="{{route('back.post.new')}}" enctype="multipart/form-data">
.............
</form>
添加它,您可以使用自定义请求。
希望你能帮上忙!
发布于 2020-01-03 21:47:32
我只在服务器上遇到了这个问题。图像存储在$_FILES
变量中,该变量指向php.ini
文件中的一个物理目录。确保您对此目录具有正确的权限。
php.ini:
upload_tmp_dir = /Applications/MAMP/tmp/php
https://stackoverflow.com/questions/38226875
复制相似问题