【问题标题】:multiple file validation inside a loop循环内的多个文件验证
【发布时间】:2016-10-30 20:26:59
【问题描述】:

如何在循环内对多个文件使用 Laravel 文件验证?

通常在单个文件验证中,我可以这样做

$validator = Validator::make($request->all(),[
    'image' => 'image|max_width:1000|max_height:1000'
]);
if($validator->fails()){
    //validation fails
}

但现在我想在一个进程中验证多个文件,比如

//store to a variable
$file = $request->file('image');
if($file){ //if request file image exist
    foreach($request->file('image') as $i){
    //here, validate each file image, but it just I don't know how
    }
}

现在前端,详细说一下在一篇文章中发送多个文件的过程。

$(document).on("change",'input[type="file"]',function(){
    if($(this).val()!==""){
        var files = this.files;
        handleFileUpload(files);
        $(this).val("");
    }
});

function handleFileUpload(files)
{
    //create a formData
    var fd = new FormData();
    //loop through e
    for (var i = 0; i < files.length; i++) 
    {
        //append each file object to the formData
        fd.append('image[]', files[i]);
    }
    //this function is where ajax request will be process
    sendFileToServer(fd); 
}

如果我在后端转储请求,我会得到这些

array(2) { [0]=> object(Illuminate\Http\UploadedFile)#214 (7) { ["test":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> 布尔(假) ["originalName":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> 字符串(50)“12400457_643171672489204_2452820305362127031_n.jpg” ["mimeType":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> 字符串(10)“图像/JPEG” ["size":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> 整数(18413) ["错误":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> int(0) ["pathName":"SplFileInfo":private]=> 字符串(25) "C:\wamp64\tmp\phpBAE4.tmp" ["文件名":"SplFileInfo":private]=> 字符串(11)“phpBAE4.tmp”}[1]=> object(Illuminate\Http\UploadedFile)#217 (7) { ["test":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> 布尔(假) ["originalName":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> 字符串(39)“13296200_702501119889592_55691535_n.jpg” ["mimeType":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> 字符串(10)“图像/JPEG” ["size":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> 整数(95383) ["错误":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> int(0) ["pathName":"SplFileInfo":private]=> 字符串(25) "C:\wamp64\tmp\phpBAE5.tmp" ["文件名":"SplFileInfo":private]=> 字符串(11)“phpBAE5.tmp”}}

关于如何在循环内的多个文件上使用 Laravel 文件验证的任何想法、线索和帮助?

PS:我在 Laravel 5.2 上运行

【问题讨论】:

标签: php laravel laravel-5.2


【解决方案1】:

尝试将image 文件输入字段作为数组发送,然后使用数组验证。如果你使用的是 Laravel 5.2,你可以使用 Array Validation 并放弃 foreach 循环来构建规则。

首先,您需要将文件输入设置为数组...

如果您使用一个输入字段:

<input type="file" name="image[]" multiple>

然后您的请求将通过如下方式出现:

array:2 [▼
  "_token" => "oX3sTXPDnNiVj9mX20VOHe2xo1Ahx6sWzU4VHZxh"
  "image" => array:2 [▼
    0 => UploadedFile {#147 ▶}
    1 => UploadedFile {#146 ▶}
  ]
]

然后使用数组验证,您的规则将在验证器中通过使用星号符号表示数组字段来声明:

$validator = Validator::make($request->all(),[
    'image.*' => 'image|max_width:1000|max_height:1000'
]);

查看此处的文档以获取更多信息:https://laravel.com/docs/5.2/validation#validating-arrays

【讨论】:

  • 这里一样,一样的想法,我已经应用了,谢谢提及。
【解决方案2】:

您可以尝试以下方法:

    foreach($this->input('image') as $key => $value){
        $rules['image.'.$key] = 'image|max_width:1000|max_height:1000';
    }

【讨论】:

    猜你喜欢
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2016-05-27
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多