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,那么出了什么问题呢?


你从哪里得到这个图像文件的?它应该有一个jpeg的mime类型,不仅仅是文件扩展名。 - Jerodev
这是一个常见的图像文件,我确定它的MIME类型是jpg,我还尝试了其他图像,但结果都一样。 - Tohid Dadashnezhad
你能发布整个HTML表单的代码吗?或者至少展示一下你是如何构建form标签的。 - Jerodev
3个回答

1
原因是您需要在form标签中定义属性enctype = "multipart/form-data"。因此,在使用Laravel 5.X表单门面时,您需要在form open的数组中传递属性files => true,如下所示:
{!! Form::open(['url'=>'admins','files' => true]) !!}
                              //^^^^^^^^^^^^^^^^ added

源文档


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
]

如果是这种情况,那么Web服务器不会返回错误吗? - Jerodev

0

我已经解决了,原因是我没有在表单中添加enctype属性。

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

感谢所有的回复。 - Tohid Dadashnezhad
实际要实现的部分是使用 {!! Form::open(['url'=>'admins','files'=>true]) !!} 而不是 {!! Form::open(['url'=>'admins','enctype'=>'multipart/form-data']) !!} - Narendrasingh Sisodia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接