【问题标题】:Laravel validate each file separatelyLaravel 分别验证每个文件
【发布时间】:2021-10-11 06:40:02
【问题描述】:

我想验证多个文件的大小,如果大小不合适,我想调整单个文件的大小,如果大小合适,我以原始大小上传。

我在前面有几个输入:

<div class="form-group">
     <strong>SELECT MAIN IMAGE (required)</strong>
     <input type="file" name="files[fileMain]" id="fileMain" class="form-control-file border 
      mb-1 {{ $errors->has('fileMain') ? ' is-invalid' : '' }}" >
</div>

<div class="form-group">
     <input type="file" name="files[]" id="file1" class="form-control-file border mb-1 
     {{$errors->has('file') ? ' is-invalid' : '' }}" >
</div>

在我的控制器中: 我用:

foreach($request->file('files') as $index => $file) {
   // Laravel validators methods works only for arrays so new Request array is created here
   $single_file_array = new Request(
    [
       'files[]' => $file
    ]);
    // send single file to validator
    $imageSizeValidation = ImageUtil::imageSizeValidator($single_file_array, 
    ENUMS::MAX_IMAGE_RESOLUTION_FOR_PROVIDER);

    if($imageSizeValidation) {
       $new_name = ImageUtil::uploadOriginalImageFileToBlogFolder2($file, $dest_folder);
    } else {
        // resize image and save to dB
        $new_name = ImageUtil::resizeImage2($file, ENUMS::MAX_IMAGE_RESOLUTION_FOR_PROVIDER, 
        $dest_folder);
    }
}

我的验证器看起来像:

$sizeValidator = Validator::make($request->all(),
   [
      'files.*' => Rule::dimensions()->maxWidth($predefined_max_size)
   ]);

   if($sizeValidator->fails()) {
      return false;
   }
   
   return true;

所有文件都是真实的 :( 这意味着验证器看不到文件并且不验证它们。 这段代码有什么问题? 如何验证单个文件,然后决定如果单个文件失败该怎么办 我不想一次发送所有文件,因为它不会让我决定单个文件。

【问题讨论】:

    标签: php laravel validation file-upload


    【解决方案1】:

    好吧,我想出如下解决方案。 我获取每个文件(来自 $request->files() 并提出一个包含该文件的新请求(UploadedFile 的新实例)并验证该新请求。 我认为这是真正解决方案的更多解决方法,但没有人提出更好的方法。 我的代码:

    foreach($request->file('files') as $index => $file) {
       $single_file_request = new Request();
    
       $uploadedFileAddress = $file->getPathname();
       $new_file = new UploadedFile($uploadedFileAddress, "files[$index]"); 
       $single_file_request->files->set("files", ['files' => $new_file]); 
    
       $imageSizeValidation = ImageUtil::imageSizeValidator($single_file_request, ENUMS::MAX_IMAGE_RESOLUTION_FOR_PROVIDER);
    
    // rest of the code 
    }
    

    它并不完美,但可以完成工作。 现在在验证每个文件之后,我可以决定如何处理它:) 也许这会激发某人找出其他/更好的解决方案:)

    【讨论】:

      猜你喜欢
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      • 2018-07-16
      • 2021-03-08
      • 2018-05-05
      • 1970-01-01
      相关资源
      最近更新 更多