php codeigniter upload avatar

php - Codeigniter reemplazar imagen cargada



upload avatar (3)

Estoy usando la clase de carga de archivos de Codeigniter para cargar avatares de usuario. ¿Hay alguna forma de reemplazar el archivo de imagen de un usuario cada vez que sube uno nuevo? Quiero reemplazar un avatar existente con el más nuevo subido.

Mi controlador de carga de imágenes

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''); } }


Existe una overwrite atributo público que dicta la decisión de sobrescribir el archivo original. De forma predeterminada, se crea un nuevo nombre de archivo basado en el original. Aquí está la fuente de Upload.php en CI:

/* * 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; } }

Entonces, todo lo que necesita hacer para que la sobreescritura funcione es:

$this->load->library(''upload'', $config); $this->upload->overwrite = true;


El simple "overide" es verdadero en tu configuración.

$this->upload->initialize(array( "upload_path"=>$path, "allowed_types"=>"jpg|png|jpeg", "overwrite"=>true ));


trataste de cambiar

$config[''overwrite''] = FALSE;

a

$config[''overwrite''] = TRUE;