允许的类型是*。因此我可以使用Codeigniter Do Upload功能上传任何文件。 但问题是当文件没有任何扩展名时,文件名本身就会成为扩展名。像文件名是xyz然后上传的文件将是xyz.xyz。我想要文件原样。扩展程序存在时没有问题。只有非扩展文件存在问题。
答案 0 :(得分:0)
为了便于解决,您可以修改codeigniter上传库(/system/libraries/Upload.php)。在get_extension()函数的开头,添加以下行:
if(strpos($filename, '.') === FALSE))return '';
答案 1 :(得分:0)
永远不要尝试编辑核心系统库,但是您可以扩展该库并更改所需的内容,当我尝试从表单数据上传blob时,我遇到了类似的问题,然后我发现codeigniter上传库从扩展名中提取上传文件名而不是mime类型,对此唯一的dummp解决方案是接受'*',但是您将面临大量其他问题,并且默认情况下将允许所有类型。无论如何,您都可以将上传库扩展为MY_Upload并通过仅添加以下一行来编辑get_extension():
public function get_extension($filename)
{
$x = explode('.', $filename);
if (count($x) === 1)
{
$x = strtok(strstr($this->file_type, '/'), '/'); // get ext from mime
return $x ? '.'.$x : '';
}
$ext = ($this->file_ext_tolower) ? strtolower(end($x)) : end($x);
return '.'.$ext;
}
顺便说一句,我能够通过更改表单数据中的文件名来解决我的问题,append('image', blob, 'image.png')
并避免了传递不带扩展名的图像名称的问题。