【问题标题】:How to validate video duration in laravel如何在 laravel 中验证视频时长
【发布时间】:2020-08-06 19:30:39
【问题描述】:

我正在尝试在静态插件中的 laravel 控制器中验证持续时间

这是使用 GetID3 的自定义验证器

Validator::extend('VideoLength', function($attribute, $value, $parameters, $validator) {
            // validate the file extension

            if(!empty($value->getClientOriginalExtension()) && ($value->getClientOriginalExtension() == 'mp4')){

                //new GetId3() expected an instance of Illuminate\Http\UploadedFile

                $track = new GetId3($value);
                $track->extractInfo();
                $duration = $track->getPlaytime();
                return(round($duration) > 30) ?false:true;
            }else{
                return false;
            }
        },'Video duration must be less then 30 seconds');

我得到的错误是:

 Owenoj\LaravelGetId3\GetId3::__construct() must be an instance of Illuminate\Http\UploadedFile, instance of Symfony\Component\HttpFoundation\File\UploadedFile given

【问题讨论】:

  • 我已经看过了,谢谢,但我的问题是在 UploadedFile 的转换中它必须是 Illuminate\Http\UploadedFile 的实例,但它是 Symfony\Compopnent 的实例

标签: laravel validation


【解决方案1】:

尝试使用自定义关闭规则。我之前使用它没有问题。还可以使用mimetypes 规则来限制文件类型。

request()->validate([
    'video' => [
        'required',
        'mimetypes:video/mp4',
        function ($attribute, $value, $fail) {
            $video = new GetId3($value);

            if ($video->getPlaytimeSeconds() > 30) {
                $fail('The video must be shorter than 30 seconds.');
            }
        }
    ]
]);

【讨论】:

  • 我已经尝试过你所做的同样的错误:/ Type error: Argument 1 passed to Owenoj\LaravelGetId3\GetId3::__construct() must be an instance of Illuminate\Http\UploadedFile, instance of Symfony\Component\HttpFoundation\File\UploadedFile given
  • 这很奇怪。因为我尝试了dd(request()->video,而转储的对象是Illuminate\Http\UploadedFile 的一个实例。你使用的是哪个 Laravel 版本?您要在哪里进行验证?另外你是如何从前端上传文件的?
猜你喜欢
  • 2014-04-18
  • 1970-01-01
  • 2016-07-04
  • 2017-01-20
  • 2018-02-01
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 2021-10-12
相关资源
最近更新 更多