Laravel - 视频文件验证

Posted

技术标签:

【中文标题】Laravel - 视频文件验证【英文标题】:Laravel - Video file validation 【发布时间】:2014-04-18 04:39:52 【问题描述】:

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

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

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


我最终是如何解决它的:

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

$file = Input::file('file');
$mime = $file->getMimeType();

然后必须编写一个 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

【问题讨论】:

【参考方案1】:

该代码正在检查扩展名而不是 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

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

【讨论】:

所以,如果我想只上传 .mov 文件,它应该像 'file' => 'mimes:video/quicktime | max:20000 一样,因为那也不会让我处理表单... 你用getMimeType检查了吗?尝试删除 max 来调试 mime 类型。 我删除了最大大小规则,并检查了 mime 类型是否为 quicktime 类型,因为我正在将具有 mime 类型的文件保存在数据库中.. 我写了一个 if 语句来检查 mime 类型并让它工作。虽然,这不是我所追求的,但我想使用验证器,以便向用户提供适当的消息。无论如何,谢谢,不知道为什么我不能用mimes 添加规则。有没有办法将其添加到规则中而不是使用 if 语句进行检查? 尝试相同但使用自定义验证:laravel.com/docs/validation#custom-validation-rules【参考方案2】:

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'
  ) 
);

【讨论】:

至少非常适合来自 iphone 5 的视频。 II 需要验证 mp4 视频,但由于某种原因它不能,我将“qt”验证放入 mime,现在它可以工作了 这个应该不错【参考方案3】:

对于其他搜索 mime 以进行视频验证的 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'

【讨论】:

不错的列表,我还会为 mkv 文件添加 video/x-matroska 我看到扩展更容易使用【参考方案4】:

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

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

【讨论】:

【参考方案5】:

使用这种模因类型

$this->validate($req, [
      'video' => 'required|mimes:mp4,ogx,oga,ogv,ogg,webm',
      ]);

这种格式适用于 OGG 文件上传。

【讨论】:

【参考方案6】:

在 Laravel 中,您不必使用 video/.我有这个问题,我解决了。使用下面的代码解决方案。

$request->validate([
            "file"=>"required | mimes:mp4,x-flv,x-mpegURL,MP2T,3gpp,quicktime,x-msvideo,x-ms-wmv |max:9000000"
        ]);

【讨论】:

【参考方案7】:

我遇到了同样的问题。使用 $file->getClientMimeType() 获取验证器似乎使用的 mime 类型。 原来其中一个 mp4 文件的 mime 类型为 video/x-m4v

【讨论】:

以上是关于Laravel - 视频文件验证的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 Mime 验证

无法使用 laravel 文件管理器上传大文件(视频)

视频上传和流式传输(使用 Laravel VueJs 上传和显示所有类型的文件视频、图像、文档等)

Laravel 文件不存在 - 文件上传

我无法在 Laravel PHP 和 HTML 中显示视频、音频和图像

JavaScript JQuery验证视频文件