Laravel 5上传多个图像验证

时间:2015-06-27 22:51:50

标签: php validation file-upload laravel-5 multiple-files

我正在尝试一次上传多张图片。文件正在上传,但即使它们不是有效的iamge,它们也会通过验证。我想上传所有有效文件,并返回一条消息,其中包含未上传成功的文件数量。

我的功能:

public function addImages($id, Request$request)
{
    $files = Input::file('images');
    $uploaded = 0;
    $failed = 0;
    foreach ($files as $file) {

        // Validate each file
        $rules = array('file' => 'required|image');
        $validator = Validator::make(array('file'=> $file), $rules);

        if($validator->passes()) {
            $destinationPath = 'uploads';
            $filename = $file->getClientOriginalName();
            $upload_success = $file->move($destinationPath, $filename);
            if($upload_success){
                $uploaded ++;
            }
            else {
               $failed ++;
            }
        } else {
            $failed ++;
        }
    }
    \Session::flash('success_message',$uploaded.' files uploaded.');
    if($failed > 0){
        \Session::flash('errors','Some files werent valid.');
    }
    return redirect('admin/myroute/'.$id);
}

出于某种原因,如果我上传的文件没有任何扩展名,他们仍然会上传。我做错了什么?

2 个答案:

答案 0 :(得分:2)

您不应该在控制器中验证它,您应该使用每种方法,例如在您的请求文件中。

protected function getValidatorInstance()
{
    $validator = parent::getValidatorInstance();


    $validator->each('files', ['image']);

    return $validator;
}

这只是检查所有文件。

更多信息,

Laravel API about validation

答案 1 :(得分:-1)

如果您要进行验证,则应指定类似文件类型,您可以指定名称并进行验证,例如'image'=> 'mimes:jpeg,jpg,bmp,png'。希望这会有所帮助