En ocasiones es necesario hacer un doble Upload en nuestros formularios, me he topado con el incómodo problema de que la librería File Uploading de Codeigniter sólo permitía subir una imagen por formulario, o en el peor de los casos, ambas imágenes quedan con el mismo nombre.
Un típico trozo del código de la llamada a do_upload():
function do_upload($upload_path = '', $allowed_types = '', $filename = '', $redirect_path = ',$file='userfile') { $config['upload_path'] = $upload_path; $config['allowed_types'] = $allowed_types; $config['max_size'] = '10240'; $config['max_width'] = '6000'; $config['max_height'] = '6000'; $config['file_name'] = $filename; $this->load->library('upload', $config); if (!$this->upload->do_upload()) { $error = array( 'error' => $this->upload->display_errors() ); $this->prepare_flashmessage($error['error'], 1); redirect($redirect_path, 'refresh'); } }
Un llamado a la función anterior:
Aunque a la función se le envíe un nombre diferente por cada archivo, ambas imágenes una vez creadas quedaban con el mismo nombre, sólo con la diferencia del renombre automático que le coloca un uno (1) al final del nombre del archivo:
Ésto se debe a que una vez inicializada la librería, ésta guarda cierta configuración, entre ella el nombre del Input file (casi siempre es ‘userfile’).
Para solucionar éste error se debe agregar la linea que inicializa de nuevo la librería, de ésta manera se ‘resetea’ la misma:
$this->upload->initialize($config);
Dando como resultado un método:
function do_upload($upload_path = '', $allowed_types = '', $filename = '', $redirect_path = ',$file='userfile') { $config['upload_path'] = $upload_path; $config['allowed_types'] = $allowed_types; $config['max_size'] = '10240'; $config['max_width'] = '6000'; $config['max_height'] = '6000'; $config['file_name'] = $filename; $this->load->library('upload', $config); $this->upload->initialize($config); if (!$this->upload->do_upload($file)) { $error = array( 'error' => $this->upload->display_errors() ); $this->prepare_flashmessage($error['error'], 1); redirect($redirect_path, 'refresh'); } }