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);
我在我的 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);