我正在尝试验证laravel中上传文件(mp3文件)的文件大小和mime类型。但验证似乎只有在我上传图像(gif,png)时才会生效。当我上传一个大小为100Mb的mkv文件时,验证似乎可以
$file = Input::file('audio_file');
$file_rules = array('audio_file' => 'size:5242880|mimes:mp3'); //also tried mpeg
$file_validator = Validator::make(Input::file(), $file_rules);
if($file_validator->fails()){
//return validation errors
}else{
//always goes here and succeeds
}
你知道我的代码出了什么问题吗?提前感谢!
尝试将文件规则行更改为:
$file_rules = array('audio_file' => 'size:5242880|mimes:audio/mpeg,audio/mp3,audio/mpeg3');
据此,"audio/mpeg"是mp3文件的正确MIME类型(一些浏览器也使用"audio/mpeg-3"或"audio/mp3")。
如果这不起作用,您可以在验证前获得MIME类型:
$file = Input::file('audio_file');
$mimeType = $file->getMimeType();
$supportedTypes = ['audio/mpeg', 'audio/mpeg3', 'audio/mp3'];
if (in_array($mimeType, $supportedTypes)) {
// validate or simply check the file size here
} else {
// do some other stuff
}
所选答案无效:$file->getMimeType()
返回不可预测的结果。像.css
、.js
、.po
、.xls
等文件都使用text/plain
mime类型。所以我在那里发布了我的解决方案https://stackoverflow.com/a/26299430/1331510