您正在开发具有文件上传字段格式的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'扩展名用于获取此文件扩展名。
请告诉我该怎么做才能克服这个错误或者有其他方法
答案 0 :(得分:1)
我处于类似的情况,这是我如何解决它。
警告: Laravel使用php_fileinfo的原因是因为它遵循永远不应该信任客户端的原则 - 也就是说,盲目信任MIME类型存在风险客户提供的。
如果您愿意忽略这种风险,这里有一个简单的解决方法,特别是如果您只需要处理一次上传
这是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;
}
}
// 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类型。