Laravel 5.1 文件上传验证
Posted
技术标签:
【中文标题】Laravel 5.1 文件上传验证【英文标题】:Laravel 5.1 file upload validation 【发布时间】:2016-02-25 06:40:10 【问题描述】:我想使用上传图片文件
!! Form::open(['url'=>'admins']) !!
!! Form::input('file','photo',null,['class'=>'photo_input']) !!
我的验证规则也是
public function rules()
return [
'username'=>'required|max:127|min:3|unique:users,username,'.$this->username,
'email'=>'required|max:127|email|min:3|unique:users,email,'.$this->email,
'password'=>'required|max:127|min:5|confirmed',
'password_confirmation'=>'required|max:127|min:5|',
'role'=>'required|max:127|min:5|in:programmer,admin,employee',
'photo' => 'mimes:jpg,jpeg,bmp,png,gif'
];
但我得到一个错误
照片必须是以下类型的文件:jpg、jpeg、bmp、png、gif。
而我选择的文件扩展名是jpg,有什么问题?
【问题讨论】:
你从哪里得到这个图像文件?它应该具有 jpeg 的 mime 类型,而不仅仅是文件扩展名。 这是一个普通的图像文件,我确定它的mime类型是jpg,我也尝试了其他图像,但结果是一样的。 你能把整个html表单的代码贴出来吗?或者至少向我们展示你是如何构建form
标签的。
【参考方案1】:
这个问题也是由于上传的文件过大而导致 php.ini 中允许的
请检查
上传最大文件大小
和
post_max_size
在 php.ini 中
您还可以通过扩展验证器来验证图像大小
In Your Controller
Validator::extend('img_upload_size', function($attribute, $value, $parameters)
$file = Request::file($attribute);
$image_size = $file->getClientSize();
if( (isset($parameters[0]) && $parameters[0] != 0) && $image_size > $parameters[0]) return false;
return true;
);
In Validation Rules
return [
'username'=>'required|max:127|min:3|unique:users,username,'.$this->username,
'email'=>'required|max:127|email|min:3|unique:users,email,'.$this->email,
'password'=>'required|max:127|min:5|confirmed',
'password_confirmation'=>'required|max:127|min:5|',
'role'=>'required|max:127|min:5|in:programmer,admin,employee',
'photo' => 'required|mimes:jpeg,bmp,png|img_upload_size:1000000',//!MB
]
【讨论】:
如果是这样的话,Web服务器不会返回错误吗?【参考方案2】:我修好了,原因是我没有在表单中添加enctype。
!! Form::open(['url'=>'admins','enctype'=>'multipart/form-data']) !!
【讨论】:
感谢所有回复 实际要实现的部分是使用!! Form::open(['url'=>'admins','files'=>true]) !!
而不是!! Form::open(['url'=>'admins','enctype'=>'multipart/form-data']) !!
【参考方案3】:
背后的原因是您需要在form
标记中定义属性enctype = "multipart/form-data"
。因此,在使用 Laravel 5.X Form Facade 时,您需要在您的 form open
数组中传递属性 files => true
,例如
!! Form::open(['url'=>'admins','files' => true]) !!
//^^^^^^^^^^^^^^^^ added
Source Docs
【讨论】:
以上是关于Laravel 5.1 文件上传验证的主要内容,如果未能解决你的问题,请参考以下文章
如何修复“文件上传失败。”使用任何图像上传验证时出错 - Laravel 5.7