Validation 如果使用ajaxForm,则图像验证不起作用

Validation 如果使用ajaxForm,则图像验证不起作用,validation,file-upload,laravel-4,ajaxform,Validation,File Upload,Laravel 4,Ajaxform,我试着用谷歌搜索,并在这个论坛上看到了其他问题,但找不到任何解决我问题的方法。我正在使用JqueryajaxForm方法提交表单。我的表单也包含一个文件字段,用于上传图片。我已经在我的模型中定义了验证。但问题是,即使我上传了一个正确的jpg文件,我仍然收到了错误消息 Argument 1 passed to Illuminate\\Validation\\Factory::make() must be of the type array, object given. Javascript代码

我试着用谷歌搜索,并在这个论坛上看到了其他问题,但找不到任何解决我问题的方法。我正在使用JqueryajaxForm方法提交表单。我的表单也包含一个文件字段,用于上传图片。我已经在我的模型中定义了验证。但问题是,即使我上传了一个正确的
jpg
文件,我仍然收到了错误消息

Argument 1 passed to Illuminate\\Validation\\Factory::make() must be of the type array, object given.
Javascript代码 控制器代码 模型代码 后请求

我知道在模型中定义的验证需要一个数组。但是通过在验证器中传递
$file
,就传递了一个对象。然后我更改了代码,如下所示:

$validator = Validator::make(array('picture' => $file->getClientOriginalName()), User::$file_rules);
现在我得到一个错误:

The picture must be a file of type: jpg, JPEG, png,gif.

问题是您直接将文件对象传递给验证。方法将所有四个参数作为数组。此外,您需要将整个文件对象作为值传递,以便
Validator
可以验证mime类型、大小等。这就是为什么您的代码应该是这样的

$input = array('picture' => Input::file('picture'));
$validator = Validator::make($input, User::$file_rules);

if ($validator->fails()) {
    $messages = $validator->messages();
    foreach ($messages->all(':message') as $message) {
        echo $message; exit;
    }
    return Response::json(array('message'=>$response, 'status'=>'failure'));
} else {
    // do rest 
}
希望它对您有用。

试试这样的规则

$rules = array(
 'picture' => 'image|mimes:jpeg,jpg,bmp,png,gif'
);

或者尝试删除“mimes”

在替换代码后,我得到了正确的文件扩展名错误,但当我上载的大文件大小超过允许的200kb时,我得到了错误“图片字段是必需的”。我无法理解为什么会出现此错误。我在与邮递员一起测试时没有问题。让我知道解决问题的细节。我已经更新了问题中的模型代码。因此,当我试图上传一个大小大于2MB的图像时,我会收到错误消息“图片字段是必需的”。可以增加最大上传大小吗?可以。这是因为这个问题。请增加
post_max_size
upload_max_filesize
以解决您的问题。
The picture must be a file of type: jpg, JPEG, png,gif.
$input = array('picture' => Input::file('picture'));
$validator = Validator::make($input, User::$file_rules);

if ($validator->fails()) {
    $messages = $validator->messages();
    foreach ($messages->all(':message') as $message) {
        echo $message; exit;
    }
    return Response::json(array('message'=>$response, 'status'=>'failure'));
} else {
    // do rest 
}
$rules = array(
 'picture' => 'image|mimes:jpeg,jpg,bmp,png,gif'
);