【问题标题】:Laravel 5.1 file upload validationLaravel 5.1 文件上传验证
【发布时间】: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 标签的。

标签: php file-upload laravel-5.1


【解决方案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

【讨论】:

    猜你喜欢
    • 2014-06-30
    • 2017-02-12
    • 2023-03-03
    • 2020-11-29
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多