我想验证多个文件的大小,如果大小不合适,我想调整单个文件的大小,如果大小合适,我以原始大小上传。
前面有一些输入:
<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;
所有文件都是true:(这意味着验证器看不到文件,也不验证它们。这段代码有什么问题?我如何验证单个文件,然后决定如果单个文件失败该怎么办我不想一次发送所有的文件,因为这样我就不能决定一个文件了。
我的解决方案如下:我获取每个文件(来自$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
}
这不是完美的,但做一个工作。现在每个文件验证后,我可以决定如何处理它:)也许这将激励某人找出其他/更好的解决方案:)