Laravel 5.1文件上传验证

时间:2015-11-23 08:14:52

标签: php file-upload laravel-5.1

我想使用

上传图片文件
 {!! 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,那有什么不对?

3 个答案:

答案 0 :(得分:1)

背后的原因是您需要在form标记中定义属性enctype = "multipart/form-data"。因此,在使用Laravel 5.X Form Facade时,您需要在files => true数组中传递属性form open,如

{!! Form::open(['url'=>'admins','files' => true]) !!}
                              //^^^^^^^^^^^^^^^^ added

Source Docs

答案 1 :(得分:0)

此问题也是由于上传大文件大小而导致的,然后是php.ini

中允许的

请检查

  

的upload_max_filesize

  

的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
]

答案 2 :(得分:0)

我修复了它,原因是我没有在表单中添加enctype。

{!! Form::open(['url'=>'admins','enctype'=>'multipart/form-data']) !!}