我正在尝试使用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类型
答案 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)
您可以使用
等服务调试文件并检查验证器中是否有错误
if ($validator -> passes()) {
// passes
} else {
dd($validator->errors()->all());
}
如果验证器未按预期工作,您可以尝试使用其他验证器,如http://pastebin.com/raw/NcL5BLwg