如何在laravel中验证多个图像

时间:2019-07-13 22:47:51

标签: php laravel laravel-5

我正在尝试验证图像,因此用户只能输入五个图像(最大),并且他也不能上传video,ai,psd等。到目前为止,当我尝试上传视频时会显示没有错误,它也不会上传产品,如果我尝试上传psd之类的其他文件,则会显示错误。

  

Illuminate \ Http \ Exceptions \ PostTooLargeException

我如何才能仅验证要上传的最多五张图像,并且仅验证mimes:jpeg,jpg,png这些类型的文件?

代码

控制器

public function store(Request $request)
{
    $this->validate(
        $request,
        [
            'photos' => 'required',
            'photos.*' => '|mimes:jpeg,jpg,png',
        ]);

    foreach ($request->photos as $photo) {
        $filename = $photo->store('public/photos');
        ProductsPhoto::create([
            'product_id' => $product->id,
            'filename' => $filename
        ]);
    }
}

刀片模板

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

2 个答案:

答案 0 :(得分:0)

  

如果我尝试上传psd之类的其他文件,则会显示错误Illuminate\Http\Exceptions\PostTooLargeException

当有效负载高于服务器配置的PostTooLargeException时,将抛出upload_max_filesize(当然,您可以自定义此设置)。例如,如果用户尝试上传视频,则总是会抛出该错误。现在,您可以用不同的方式(不是排他性的)来对待它:

  • 前端验证,以确保最大上传大小。
  • 一种在前端处理此响应错误的方法。
  • 指定验证规则以限制上传文件的最大上传大小,以免达到允许的最大值。

对于后一种选项,您可以使用max验证规则验证之后的size规则。从文档中:

  

max:value

     

正在验证的字段必须小于或等于最大值   值。字符串,数字,数组和文件的计算方式相同   时尚就是大小规则。

     

大小:值

     

正在验证的字段必须具有与给定值匹配的大小。   对于字符串数据,值对应于字符数。对于   数字数据,值对应于给定的整数值。 对于   数组,其大小对应于数组的count 对于文件,   size对应于文件大小(以千字节为单位)。

因此,您可以检查上传的文件:

$this->validate(
    $request, 
    [
    'photos' => 'required',
    'photos.*' => 'mimes:jpeg,jpg,png|max:4000', // e.g., each file should be less than 4MB
   )];

与下一件事情有关:

  

如何验证最多只能上传五个图像?

您可以使用相同的规则,但是现在可以验证数组大小:

$this->validate(
    $request, 
    [
    'photos' => 'required|array|max:5', // <----
    'photos.*' => 'mimes:jpeg,jpg,png',
   )];

当然,您可以结合使用这些限制来完成所需的行为。

答案 1 :(得分:0)

很简单,我之前做过:

$galleryImageCount = 0; // count the number of existing images if needed
$galleryImageRules = ['bail|image|mimes:jpeg,png,jpg|max:5120','bail|sometimes|image|mimes:jpeg,png,jpg|max:5120'];
$imageRule = [];

for ($i = 0; $i < (5 - $galleryImageCount); $i++) {
        $rule = ($i == 0) ? $galleryImageRules[0] : $galleryImageRules[1];
        $key = 'gallery_image.' . $i;
        $imageRule[$key] = $rule;
}

$this->validate(
    $request,
    $imageRule);
//Replace 'gallery_image' with 'photos' in your case.
  • 干杯!