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

时间:2016-06-03 12:18:55

标签: php laravel extension-methods

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:8)

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

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

Laravel使用Symfony File和Symfony File使用built-in PHP's finfo来猜测mime类型。

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

顺便说一句,试试shell:

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

看看你是否得到正确答案。

答案 1 :(得分:1)

您可以使用

等服务调试文件

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