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

Why does laravels guessExtension() method say that my mp3 file is bin?

我正在尝试使用 laravel 上传 mp3 文件。当我做

dd(Input::file('mp3')->guessExtension());

它以带有某些 mp3 文件的字符串形式返回“bin”。对于其他文件,这是正确的,它还给我 'mpga'。 这个“bin”作为扩展名是什么意思?

当我执行此规则时,此文件现在未经过我的验证:

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

当我转储我的请求时,它说 mimetype 是 mpga ,但它仍然返回错误:'file must be of type mpga'

您可以使用

等服务调试您的文件

http://mime.ritey.com/

并检查验证器是否有任何错误

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

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

阅读此处:File upload mime-type validation with Laravel 4

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

// Part of the MimeTypeExtensionGuesser class
'application/octet-stream' => 'bin',

Laravel 使用 Symfony 文件,而 Symfony 文件使用 built-in PHP's finfo 来猜测 mime 类型。

因此,您的问题变成了 – 为什么 finfo 将您的一些 MP3 文件检测为 application/octet-stream?考虑到其他文件通过,这个特定的 MP3 文件可能有点问题。

顺便说一下,试试 shell:

$ file -I file.mp3 
file.mp3: audio/mpeg; charset=binary

看看你是否得到正确的回应。