我在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!
感谢您的帮助。
答案 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'