即使上传了文件,Laravel Input::hasFile('image') 也会返回 false

Posted

技术标签:

【中文标题】即使上传了文件,Laravel Input::hasFile(\'image\') 也会返回 false【英文标题】:Laravel Input::hasFile('image') returns false even if a File is uploaded即使上传了文件,Laravel Input::hasFile('image') 也会返回 false 【发布时间】:2014-11-13 18:28:33 【问题描述】:

我有一个用于上传图片的表单字段,我用 'files' => true 打开它,如下所示:

 Form::label('image', 'Image') 
 Form::file('image') 

在我的控制器中,我想检查文件是否已上传并对其进行处理:

if (Input::hasFile('image'))
        $in_path = 'img/';
        $in_extension = Input::file('image')->getClientOriginalExtension();
        $filename = Input::get('name').".".$in_extension;
        Input::file('image')->move($in_path, $filename);
        $user->image = $filename;
    

但是Input::hasFile 总是返回 false,我不知道为什么。

Input::file('image');

结果:

Symfony\Component\HttpFoundation\File\UploadedFile Object
(
[test:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 
[originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => test.JPG
[mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => application/octet-stream
[size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
[error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 1
[pathName:SplFileInfo:private] => 
[fileName:SplFileInfo:private] => 
)

我已经为另一个用户测试了另一张图片,效果很好。我不明白为什么这对某些用户有效,而对另一些用户则无效。 是不是有些图片不被接受?

还有哪些其他来源可能导致此问题?

【问题讨论】:

文件存在吗?是上传了吗?你能把Input::file()里面的东西贴出来吗?使用 dd() 进行 var_dumping。 我编辑了我的问题! 我解决了问题所在。代码很好,但问题是有些图片太大了。 【参考方案1】:

我解决了问题所在。 代码很好,但问题是有些图片太大了。 编辑: 正如 Don't Panic 指出的,编辑upload_max_filesize 可以解决问题。

【讨论】:

为什么大图返回hasfile() -> false? @Jorre 我无法回答这个问题......但一切都适用于较小的图片。 作为评论更好,因为它很短。这就是答案,而且完全有效。我遇到了同样的问题并得出了相同的解决方案。增加upload_max_filesize 就可以了。 需要注意的重要一点是我还必须将 post_max_size 更改为大于 upload_max_filesize。【参考方案2】:

我遇到了同样的问题,我检查了我的代码,发现表单中没有 enctype="multipart/form-data" 标头,希望这个大疏忽对任何人有所帮助

【讨论】:

【参考方案3】:

如何打开表单?如果您希望表单接受您需要的文件,请像这样打开它:

echo Form::open(array('url' => 'foo/bar', 'files' => true))

Opening a form in the Laravel Docs

【讨论】:

【参考方案4】:

对于使用更高版本 laravel 的人

enctype="multipart/form-data"添加为表单属性,同时确保methodPOST

<form action="/foo" method="post" enctype="multipart/form-data">

问候

【讨论】:

以上是关于即使上传了文件,Laravel Input::hasFile('image') 也会返回 false的主要内容,如果未能解决你的问题,请参考以下文章

上传文件时 Laravel 6.0 出现“SplFileInfo::getSize(): stat failed”异常

验证 .csv 文件时出现 Laravel MIME 问题

Laravel - 视频文件验证

无法验证laravel中的输入文件

Laravel 5 文件上传验证

laravel 收不到iOS上传的文件