首页 文章

Laravel 5.1文件上传验证

提问于
浏览
3

我想使用上传图像文件

{!! 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 回答

  • 1

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

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

    Source Docs

  • 0

    此问题也是由于上传大文件大小然后在php.ini中允许的

    请检查

    upload_max_filesize

    post_max_size

    在php.ini中

    您还可以通过扩展Validator来验证图像大小

    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
    ]
    
  • 0

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

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

相关问题