为什么laravels guessExtension()方法说我的mp3文件是bin?

Jim*_*ers 4 php extension-methods laravel

我正在尝试使用laravel上传一个mp3文件.而当我这样做

dd(Input::file('mp3')->guessExtension());
Run Code Online (Sandbox Code Playgroud)

它给了我带有某些mp3文件的字符串中的" bin ".对于其他文件,这是正确的,它给了我'mpga'.这个" bin "作为扩展意味着什么?

当我执行此规则时,此文件现在不会通过我的验证:

$validator = Validator::make($request->all(), [
            'mp3'      => 'required|mimes:mpga|max:500',
           ]);
Run Code Online (Sandbox Code Playgroud)

当我转储我的请求时,它说mimetype是mpga,但它仍然返回错误:'文件必须是mpga类型'

Den*_*nko 8

要回答您的一个问题,为八位字节流返回'bin':

// Part of the MimeTypeExtensionGuesser class
'application/octet-stream' => 'bin',
Run Code Online (Sandbox Code Playgroud)

Laravel使用Symfony File和Symfony File使用内置的PHP的finfo来猜测mime类型.

因此,您的问题变成了 - 为什么finfo会将某些MP3文件检测为application/octet-stream?鉴于其他文件通过,这个特定的MP3文件有可能出现一些问题.

顺便说一句,试试shell:

$ file -I file.mp3 
file.mp3: audio/mpeg; charset=binary
Run Code Online (Sandbox Code Playgroud)

看看你是否得到了正确的答复.


Die*_*tto 2

您可以使用以下服务调试文件

http://mime.ritey.com/

并检查验证器是否有错误

if ($validator -> passes()) { // passes } else { dd($validator->errors()->all()); }

如果验证器未按您的预期工作,您可以尝试使用另一个验证器,例如http://pastebin.com/raw/NcL5BLwg

阅读此处:使用 Laravel 4 进行文件上传 mime 类型验证