我正在开发一个通过ajax(老派,不是Jquery)的多文件上传。我终于把它弄好了。问题是,我不得不注释掉system/library/upload文件中的一行,这听起来不像是一种建议的解决问题的方法。
在行未注释的情况下,如果我输出upload->display_errors(),我会得到一个unsupported operand types in...system/libraries/upload.php on line 496
错误消息。
系统/库/上载的第496行是:
// Convert the file size to kilobytes
if ($this->file_size > 0)
{
$this->file_size = round($this->file_size/1024, 2);// <- this line
}
如果我像这样注释掉这一行,我不会得到错误,并且文件上传正确:
// Convert the file size to kilobytes
if ($this->file_size > 0)
{
//$this->file_size = round($this->file_size/1024, 2);
}
这是我的基本控制器,称为“Uploader”,以免与CI的库->upload混淆(我复制了这个类,出于某种原因,作者决定将他的类命名为“upload”,还决定将函数命名为“do_upload”,这有点混乱,因为这些是CodeIgniter用于其upload类和do_upload函数的名称)。如您所见,我注释掉了$config数组中的max_size参数:
class Uploader extends CI_Controller {
function __construct()
{
parent::__construct();
}
private $data = array();
private $params = array();
public function index()
{
echo "This is the index!";
}
public function do_upload()
{
echo "<p>upload controller:</p>";
$config = $this->set_upload_options();
$this->load->library('upload',$config);
echo "<pre>";
print_r($_FILES);
$files = $_FILES;
$cpt = count($_FILES['photos']['name']);
$data = array();
$photos = "photos";
for($i=0; $i<$cpt; $i++)
{
$_FILES['photos']['name']= $files['photos']['name'][$i];
$_FILES['photos']['type']= $files['photos']['type'][$i];
$_FILES['photos']['tmp_name']= $files['photos']['tmp_name'][$i];
$_FILES['photos']['error']= $files['photos']['error'][$i];
$this->upload->initialize($config);
if (!$this->upload->do_upload($photos)) {
$error = array('error' => $this->upload->display_errors());
foreach($error as $err)
{
echo "<p>".$err."</p>";
}
}
}
$data['count'] = $i;
echo $data['count'];
return $data;
}
private function set_upload_options()
{
//upload an image options
$config = array();
$config['upload_path'] = FCPATH . 'assets_/images/assets/experimental/';
$config['allowed_types'] = 'gif|jpg|png';
//$config['max_size'] = '0';
$config['overwrite'] = TRUE;
return $config;
}
}
我该听天由命吗?还是我只是在包扎一个很可能会卷土重来的问题?
更新:在尝试输出一些`$this->file_size()之后,我发现它是作为数组传递的,所以自然数组不能是操作数。
现在,我将system->libraries->upload file中的if
块更改为this,一个For循环,它根据循环中迭代的$this->file_size[$I]分配一个新的$this->file_size。这也许是答案,但我会等待其他人的贡献,然后再回答我自己的问题:
// Convert the file size to kilobytes
if ($this->file_size > 0)
{
if(is_array($this->file_size)){
for($i=0;$i<count($this->file_size);$i++)
{
$this->file_size[$i] = round( $this->file_size[$i] / 1024, 2 );
}
}else{
$this->file_size = round($this->file_size/1024, 2);
}
}
请选中system\core\common.php
function &get_mimes()
{
static $_mimes;
if (empty($_mimes))
{
if (file_exists(APPPATH.'config/'.ENVIRONMENT.'/mimes.php'))
{
$_mimes = include(APPPATH.'config/'.ENVIRONMENT.'/mimes.php');
}
elseif (file_exists(APPPATH.'config/mimes.php'))
{
$_mimes = include(APPPATH.'config/mimes.php');
}
else
{
$_mimes = array();
}
}
return $_mimes;
}
请根据codeigniter环境(开发/生产)检查您的mimes.php(在config文件夹中)。您应该将mimes.php移动到您的环境文件夹(Development/Production)中。
我知道问题发生的原因,也知道该怎么做来修复它。这个问题在我描述的第一句“多文件上传”中有所暗示。
正如我已经指出的,“不受支持的操作数”不是别的,就是file_size是一个数组,而不是一个简单的整数。它是如何成为一个数组的?
您可以看到,$_files对象变成了数组的数组,因为我上传的是多个图片文件,而不是单个文件,因此一个数组而不是一个简单的整数被传递给System->Libraries->Upload class,第494到497行,
if ($this->file_size > 0)
{
$this->file_size = round($this->file_size/1024, 2);
}
$this->file_size
变成一个数组,这意味着它不再是一个简单的操作数...$this->file_size是不支持的操作数!
当然,我们不能满足于“嗯,我想你不应该同时上传多个文件。”我们需要被允许一次上传多个文件。这是一个要求。
我尝试在for循环中移动$this->upload->initialize($this->set_upload_options());
行,以便为每个文件设置upload$config,但仍然出现此错误。我相信还有一个更好的解决方案,但是现在修改system/libraries/upload.php中第494行开始的if
块似乎是最好的办法:
if ($this->file_size > 0)
{
if(is_array($this->file_size)){
for($i=0;$i<count($this->file_size);$i++)
{
$this->file_size[$i] = round( $this->file_size[$i] / 1024, 2 );
}
}else{
$this->file_size = round($this->file_size/1024, 2);
}
}
现在您可以将一个简单的file_size甚至一个file_size作为数组传递(因为您尝试上传多个文件),这就起作用了。
并确保您的$CONFIG数组如下所示,其中$CONFIG['max_size']=0;
中的0而不是$CONFIG['max_size']='0';
private function set_upload_options()
{
//upload an image options
$config = array();
$config['upload_path'] = FCPATH . 'assets_/images/assets/experimental/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 0;
$config['overwrite'] = TRUE;
return $config;
}
显然,如果它是“0”而不是0,它就不会得到正确的评估。
我有以下代码。我知道它既长又复杂,但在我的笔记本电脑上运行需要1.5分钟。如果您能帮助我找到最后导致错误的问题-绘图部分,我将不胜感激。我在Google上没有找到与此错误消息相关的任何内容: QuadMesh和Float的不支持操作数类型 在绘图部分,我尝试了多种形式。它失败于: 在以下情况下失败: 我没有办法在那里介绍什么。 非常感谢。
问题内容: 每当我运行这个程序我都会得到这个 我该怎么做才能将pyc除以tpy? 问题答案: 通过将它们变成整数: 在python 3中,该函数返回一个字符串。总是。这是对Python 2的更改;该功能已重命名为。
问题内容: 我试图像这样制作垂直的seaborn boxplot 我得到 我写东方 并得到 但 作品coreect!怎么了? 问题答案: 对于Seaborn的箱形图,在水平和垂直对齐方式之间切换时,请务必注意x轴和y轴的分配: 混淆列会导致seaborn尝试计算分类数据框中的摘要统计信息,这肯定会失败。
我正在使用sql server进行数据库连接。并且我希望在运行多个结果集时保持结果集打开。我使用了,但在执行语句时出现以下错误, 由于我是使用sql server的新手,所以我对其中的一些概念还不是很了解。如果有人知道为什么会这样请回答我。
我正在使用ASP.NET 5 如果我将其中一个命令模型名称更改为不同的名称,那么Swagger就可以工作了。然而,我相信这个嵌套类模型名称是合法的,也应该与swagger一起使用。如果有办法解决这个问题。谢谢
我正在为我的小型数据科学项目计算线性回归。 当将list(Dictionary.values())传递到我得到的类中时 回溯(最近的调用为last):文件“C://users/paweé/documents/projects vscode/worldbankdatakeras/tests.py”,第41行,在graph.plot_graph_renewable_electricity_status