Codeigniter 替换上传的图片
Posted
技术标签:
【中文标题】Codeigniter 替换上传的图片【英文标题】:Codeigniter replace uploaded image 【发布时间】:2012-07-07 11:36:46 【问题描述】:我正在使用 Codeigniter 的 File Uploading Class 上传用户头像。每当他/她上传新的图像文件时,有没有办法替换用户的图像文件?我想用上传的最新头像替换现有头像。
我的图片上传控制器
function upload_avatar()
$config['upload_path'] = './uploads/avatars/';
$config['allowed_types'] = 'jpg|png';
$config['overwrite'] = FALSE; //overwrite user avatar
$config['encrypt_name'] = TRUE;
$config['max_size'] = '200'; //in KB
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
redirect('/settings/avatar');
else
$config['image_library'] = 'gd2';
$config['source_image'] = $this->upload->upload_path.$this->upload->file_name;
$config['create_thumb'] = FALSE;
$config['maintain_ratio'] = FALSE;
$config['width'] = 120;
$config['height'] = 120;
$this->load->library('image_lib', $config);
$this->image_lib->crop();
//Add image path to database
$avatar_path = 'uploads/avatars/' . $this->upload->file_name;
$user_id = $this->tank_auth->get_user_id();
$this->Settings_model->update_avatar($avatar_path, $user_id);
$this->session->set_flashdata('success', 'Avatar updated!');
redirect('/settings/avatar');
【问题讨论】:
你有没有试过把这行$config['overwrite'] = FALSE; //overwrite user avatar
设置成TRUE
?
【参考方案1】:
有一个公共属性overwrite
指示覆盖原始文件的决定。默认情况下,会根据原始文件名创建一个新文件名。这是 CI 中 Upload.php 的源代码:
/*
* Validate the file name
* This function appends an number onto the end of
* the file if one with the same name already exists.
* If it returns false there was a problem.
*/
$this->orig_name = $this->file_name;
if ($this->overwrite == FALSE)
$this->file_name = $this->set_filename($this->upload_path, $this->file_name);
if ($this->file_name === FALSE)
return FALSE;
所以你需要做的就是让覆盖工作:
$this->load->library('upload', $config);
$this->upload->overwrite = true;
【讨论】:
谢谢!为了使替换工作,我认为我必须给每个头像图像一个唯一的名称,比如用户的用户名。这样,用户上传的任何内容都会替换已存储的内容。【参考方案2】:简单设置“覆盖”在您的配置中为真。
$this->upload->initialize(array(
"upload_path"=>$path,
"allowed_types"=>"jpg|png|jpeg",
"overwrite"=>true
));
【讨论】:
【参考方案3】:你有没有尝试改变
$config['overwrite'] = FALSE;
到
$config['overwrite'] = TRUE;
【讨论】:
与$this->upload->overwrite = true;
相比是一个不错的选择以上是关于Codeigniter 替换上传的图片的主要内容,如果未能解决你的问题,请参考以下文章