Laravel 分别验证每个文件
Posted
技术标签:
【中文标题】Laravel 分别验证每个文件【英文标题】:Laravel validate each file separately 【发布时间】: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;
所有文件都是真实的 :( 这意味着验证器看不到文件并且不验证它们。 这段代码有什么问题? 如何验证单个文件,然后决定如果单个文件失败该怎么办 我不想一次发送所有文件,因为它不会让我决定单个文件。
【问题讨论】:
【参考方案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
它并不完美,但可以完成工作。 现在在验证每个文件之后,我可以决定如何处理它:) 也许这会激发某人找出其他/更好的解决方案:)
【讨论】:
以上是关于Laravel 分别验证每个文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Vue 2 和 Laravel 5.5 中验证会话和身份验证令牌