我正在尝试为将要上传到我的服务器的图像创建缩略图。请参阅https://www.codeigniter.com/userguide3/libraries/image_lib.html#processing-an-image。创建之后,我想将缩略图保存到另一个文件夹,因为原始图像和缩略图都将保存在同一位置。
因此,我尝试使用initialize
函数,但无法移动文件。我不确定我的代码是否正确完成。看看。
Belwo是我的代码:
move_uploaded_file()
答案 0 :(得分:1)
您找到了使用重命名或复制的正确解决方案。
无法使用move_uploaded_file的原因是因为此函数将仅移动$ _FILES数组中临时名称等于“ tmp_name”的上载文件。
此行为的原因在PHP手册中进行了解释:“此函数检查以确保filename所指定的文件是有效的上载文件(意味着该文件是通过PHP的HTTP POST上载机制上载的。)有效,它将被移动到目的地给定的文件名。 如果上传的文件所做的任何事情都可能向用户甚至同一系统上的其他用户透露其内容,则这种检查尤为重要。”
按照PHP手册中的POST方法上传:
$ _ FILES ['userfile'] ['name'] =客户端计算机上文件的原始名称。 $ _FILES ['userfile'] ['tmp_name'] =上载文件存储在服务器上的文件的临时文件名。
结束报价
“ tmp_name”是服务器生成的唯一密钥,因此文件系统中没有文件名重复。
在您的代码中,您构建的$ thumbnail字符串与$ _FILES数组中的“ tmp_name”不匹配。
您没有收到错误消息的原因是,再次从PHP手册开始,但是这次是move_uploaded_file:“如果filename不是有效的上传文件,则将不会执行任何操作,而move_uploaded_file()将返回FALSE。” >
因此,如果您在代码中捕获了move_uploaded_file的结果,例如$ moveResult = move_uploaded_file(...,则最终将得到$ moveResult === false。按顺序检查此类操作的结果总是一个好主意。出问题时要做出反应。
答案 1 :(得分:1)
希望这对您有帮助:
在new_image
中使用$configer
更改文件夹路径:$config['new_image'] = '/path/to/new_image.jpg';
注意: 如果仅指定新的图像名称,它将与原始图像放置在同一文件夹中
如果仅指定路径,则新图像将以与原始图像相同的名称放置在目标位置。
如果同时指定了路径和图像名称,则会将其放置在自己的目标位置并赋予新名称。
您的代码应如下所示:
if($this->upload->do_upload('file_name'))
{
$uploadData = $this->upload->data();
$file_name = $uploadData['file_name'];
$this->load->library('image_lib');
$configer = array(
'image_library' => 'gd2',
'source_image' => $uploadData['full_path'],
'create_thumb' => TRUE,
'maintain_ratio' => TRUE,
'width' => 950,
'height' => 950,
'new_image' => FCPATH.MEDIA_LIB_URI.'facts/thumbnail/'
);
$this->image_lib->clear();
$this->image_lib->initialize($configer);
$this->image_lib->resize();
return $file_name;
}
else
{
return $this->upload->display_errors();
}
更多信息:https://www.codeigniter.com/user_guide/libraries/image_lib.html#CI_Image_lib::resize