laravel 4中的mime类型验证不起作用

时间:2014-04-10 07:43:23

标签: php validation laravel laravel-4 mime-types

我试图在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
}

任何想法我的代码有什么问题?提前谢谢!

2 个答案:

答案 0 :(得分:5)

尝试将文件规则行更改为:

$file_rules = array('audio_file' => 'size:5242880|mimes:audio/mpeg,audio/mp3,audio/mpeg3');

根据this,'audio / mpeg'是mp3文件的正确MIME类型(某些浏览器也使用'audio / mpeg3'或'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
}

答案 1 :(得分:0)

所选答案不起作用:$file->getMimeType()返回不可预知的结果。 .css.js.po.xls等文件以及更多获取text/plain mime类型的文件。所以我在那里发布了我的解决方案https://stackoverflow.com/a/26299430/1331510