Laravel 3有一个File :: mime()方法,可以很容易地从其扩展名中获取文件的mime类型:
$extension = File::extension($path);
$mime = File::mime($extension);
Run Code Online (Sandbox Code Playgroud)
升级到Laravel 4时出现错误:
调用未定义的方法Illuminate\Filesystem\Filesystem :: mime()
我也看不到在Filesystem API文档中提到mime类型.
在Laravel 4中获取文件mime类型的推荐方法是什么(请注意这不是用户上传的文件)?
问题:当上传的文件超过 5000kb 时,验证器返回 'required' 消息而不是 'max' 消息。为什么 ?
$file = (Input::file('inputName'));
$fileValidator = Validator::make(
array('Field Name' => $file),
array('Field Name' => 'required|max:5000|mimes:jpeg,png,bmp')
);
if($fileValidator->fails()){
return $fileValidator->errors()->all(':message');
}
Run Code Online (Sandbox Code Playgroud)
更新:这个问题尤其发生在 *.psd 文件的验证上。
更新 2:当我 var_dump($file) 时,我可以看到;
object(Symfony\Component\HttpFoundation\File\UploadedFile)#9 (7) {
["test":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
bool(false)
["originalName":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
string(52) "4-47970_rsasecurityanalyticsevolutionofsiemebook.pdf"
["mimeType":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
string(24) "application/octet-stream"
["size":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
int(0)
["error":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
int(1)
["pathName":"SplFileInfo":private]=>
string(0) ""
["fileName":"SplFileInfo":private]=>
string(0) ""
}
Run Code Online (Sandbox Code Playgroud)
如您所见, pathName 和 fileName 看起来为空。所以这就是为什么 laravel 返回所需的消息。这是新问题:为什么 fileName 为 null ?
当我上传一个结构良好的MP3文件,Laravel 4告诉我,这不audio/mp3,但是application/octet-stream,这使得这种验证失败:
$validator = Validator::make(
array('trackfile' => Input::file('trackfile')),
array('trackfile' => 'required|mimes:mp3')
);
if($validator->fails())
return 'doesn\'t works because mime type is '.Input::file('trackfile')->getMimeType();
else
return 'it works!';
Run Code Online (Sandbox Code Playgroud)
为什么不将文件上传为audio/mp3文件?
(我已添加'files' => true到表单声明中)