Laravel验证iOS录制的语音

时间:2018-09-24 13:23:11

标签: laravel mime laravel-validation

我在Laravel控制器上进行了一些mime类型的验证,以验证从移动应用程序接收到的文件:

'file' => 'required_without:body|file|mimes:png,jpg,jpeg,mp3,mp4,pdf,doc,docx,m4a'

对于大多数文件,此验证规则都可以,但是当iOS应用发送录音时,此验证规则将无效。

根据iOS开发人员的说法,文件的mime类型为audio/m4a,但是laravel(或PHP)无法检测到该文件。

我检查了$request->file('file')->getClientOriginalExtension()返回了audio/m4a,但是$request->file('file')->guessExtension()函数返回了null!

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这是我所做的,我相信这是一个好习惯:

在跟踪了laravel猜测猜测的模仿类型后,我注意到它正在注册一些ExtensionGuesser类,例如vendor/symfony/http-foundation/File/MimeType/MimeTypeExtensionGuesser.php,并且没有audio/m4a模仿类型。

我提供了AnotherMimeTypeExtensionGuesser,其中包含:

protected $defaultExtensions = array(
    'audio/m4a' => 'm4a',
    'audio/x-m4a' => 'm4a',
    'audio/mp4' => 'm4a',
);

然后我像这样在AppServiceProvider中注册它:

ExtensionGuesser::getInstance()->register(new AnotherMimeTypeExtensionGuesser);

答案 1 :(得分:0)

在验证中使用此规则

'file' => 'required_without:body|file|mimetypes:audio/mp4|mimes:m4a'