Laravel - 视频文件验证

cch*_*cch 15 php validation laravel

这是如何验证laravel中的视频文件?

$validator = Validator::make(Input::all(),
  array(
    'file'  => 'mimes:mp4,mov,ogg | max:20000'
  ) 
);
Run Code Online (Sandbox Code Playgroud)

因为即使上传的文件是mov类型,它也会返回该文件应该是上述规则中列出的类型之一.


我最终如何解决它:

根据下面的答案提示,我最终将上传文件的mime类型存储到$mime变量中,如下所示:

$file = Input::file('file');
$mime = $file->getMimeType();
Run Code Online (Sandbox Code Playgroud)

然后必须写一个if语句来检查视频mime类型:

if ($mime == "video/x-flv" || $mime == "video/mp4" || $mime == "application/x-mpegURL" || $mime == "video/MP2T" || $mime == "video/3gpp" || $mime == "video/quicktime" || $mime == "video/x-msvideo" || $mime == "video/x-ms-wmv") 
{
  // process upload
}
Run Code Online (Sandbox Code Playgroud)

mar*_*nuy 17

该代码检查扩展名但不检查MIME类型.您应该使用适当的MIME类型:

 Video Type     Extension       MIME Type
Flash           .flv            video/x-flv
MPEG-4          .mp4            video/mp4
iPhone Index    .m3u8           application/x-mpegURL
iPhone Segment  .ts             video/MP2T
3GP Mobile      .3gp            video/3gpp
QuickTime       .mov            video/quicktime
A/V Interleave  .avi            video/x-msvideo
Windows Media   .wmv            video/x-ms-wmv
Run Code Online (Sandbox Code Playgroud)

如果您不确定要测试的文件的MIME类型,可以尝试 $file->getMimeType()


小智 13

http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types

你应该在类型中添加qt:

$validator = Validator::make(Input::all(),
  array(
    'file'  => 'mimes:mp4,mov,ogg,qt | max:20000'
  ) 
);
Run Code Online (Sandbox Code Playgroud)


小智 6

我知道这是一个较旧的问题,但我今天遇到了同样的问题。Laravel 不会验证 .mov 文件类型,即使我在验证器中有“mov”、“quicktime”或“video/quicktime”。文件上的 getMimeType() 显示“视频/快速时间”,所以看起来很奇怪。

深入研究 Laravel 的验证器类,它似乎使用 guessExtension() 而不是 getMimeType() 来检查文件。当我将 'qt' 作为 mime 类型放入验证器(这是 guessExtension() 返回的)时,它起作用了。


Con*_*nor 5

对于其他搜寻哑剧以进行视频验证的Google员工,请使用以下命令:

'video' => 'mimetypes:video/x-ms-asf,video/x-flv,video/mp4,application/x-mpegURL,video/MP2T,video/3gpp,video/quicktime,video/x-msvideo,video/x-ms-wmv,video/avi'
Run Code Online (Sandbox Code Playgroud)