Laravel 验证 iOS 录制的语音

Laravel validate iOS recorded voice

我在我的 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() returns audio/m4a$request->file('file')->guessExtension() 函数 returns 为空!

感谢任何帮助。

在您的验证中使用此规则

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

这就是我所做的,我认为这是一个很好的做法:

在跟踪 laravel 猜测 mimetypes 后,我注意到它正在注册一些 ExtensionGuesser 类 就像 vendor/symfony/http-foundation/File/MimeType/MimeTypeExtensionGuesser.php 并且没有 audio/m4a mimetype。

我提供了 AnotherMimeTypeExtensionGuesser 包含:

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

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

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