Hi正在以文件上传字段的形式在laravel上开发应用程序。它在当地系统中运作得很好。但是当我把它上传到网上并提交表单时,它会显示出这个错误。
Unable to guess the mime type as no guessers are available
(Did you enable the php_fileinfo extension?)当表单提交时,我正在检查文件上传的扩展名。
Input::file('logo')->getClientOriginalExtension();我使用“php_fileinfo”扩展名来获取这个文件扩展名。
请告诉我该怎么做才能克服这个错误,否则还有别的办法吗?
发布于 2015-02-05 03:14:20
我也有类似的情况,这就是我是如何解决这个问题的。
警告: Laravel使用php_fileinfo是因为它遵循的原则是,您不应该信任客户端--也就是说,盲目信任客户端提供的MIME类型是有风险的。
如果您愿意忽略这种风险,这里有一个简单的解决方法,特别是如果您只需要处理一次上传
实现您自己的MimeTypeGuesserInterface
这是Symfony ( Laravel构建的)用来检测文件的MIME类型的接口。这个接口的一个关键限制是只提供(临时)文件的路径来猜测它的类型。这意味着,当您到达这里时,客户端提供的MIME类型已经消失。
class StupidMimetypeGuesser implements
Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface
{
protected $type = null;
public function __construct($stupidType) {
$this->type = $stupidType;
}
public function guess($path) {
return $this->type;
}
}在POST处理程序中,手动提取客户端提供的MIME类型。
// This will only work for a single upload. You can implement a fancier guesser to handle multiple files
$attachment = Input::file('attachment');
$clientMime = $attachment->getClientMimeType();
MimeTypeGuesser::getInstance()->register(new StupidMimetypeGuesser($clientMime));现在,Input::file('x')->getMimeType()将使用客户端提供的MIME类型。
https://stackoverflow.com/questions/25393629
复制相似问题