Problema al subir archivos pdf

Buenas,

estoy incursionando por vez primera con el componente ef_upload. Por alguna razon no me guarda el archivo en el campo correspondiente (tipo bytea) luego de dar Ok. No arroja error alguno y los logs no evidencian nada tampoco.

Hola Cristian,

podes comentarme un poco mas sobre el tema?.. puntualmente, como estas persistiendo el archivo a la bd, si tenes a mano el codigo del CI mucho mejor.

Saludos

Hola, Richard.

Ante todo te cuento que lo que hace efectivamente es copiar el archivo en un directorio. Lo que NO hace es impactar en la base. Puede que el tipo de dato no sea el adecuado, no?

Ahi va mi CI:

<?php //php_referencia::instancia()->agregar(__FILE__); class ci_movimientos extends rrhh_ci { public $s__nombre_archivo; function get_relacion() { return $this->controlador->get_relacion(); } //----------------------------------------------------------------------------------- //---- frm_adscripciones ------------------------------------------------------------ //----------------------------------------------------------------------------------- function conf__frm_adscripciones(rrhh_ei_formulario $form) { $datos = $this->get_relacion()->tabla('adscripciones')->get(); $form->set_datos($datos); if ($this->get_relacion()->tabla('adscripciones')->esta_cargada()) { $form->set_solo_lectura(array('expediente')); } if (isset($this->s__nombre_archivo)) { return array( 'res_concurso_adsc' => $this->s__nombre_archivo ); } } function evt__frm_adscripciones__modificacion($datos) { $this->get_relacion()->tabla('adscripciones')->set($datos); if (isset($datos['res_concurso_adsc'])) { $this->s__nombre_archivo = $datos['res_concurso_adsc']['name']; $img = toba::proyecto()->get_www_temp($this->s__nombre_archivo); // Mover los archivos subidos al servidor del directorio temporal PHP a uno propio. move_uploaded_file($datos['res_concurso_adsc']['tmp_name'], $img['path']); } } //----------------------------------------------------------------------------------- //---- frm_movimientos -------------------------------------------------------------- //----------------------------------------------------------------------------------- function conf__frm_movimientos(rrhh_ei_formulario_ml $form_ml) { return $this->get_relacion()->tabla('movimientos')->get_filas(null, true); } function evt__frm_movimientos__modificacion($datos) { $this->get_relacion()->tabla('movimientos')->procesar_filas($datos); $tipos = array('1' => false, '2' => false, '3' => false, '4' => false, '5' => false); foreach ($datos as $fila) { foreach ($tipos as $id => $valor) { if($fila['tipo'] == $id){ $tipos[$id] = true; } } } if ($tipos[5]) { $this->get_relacion()->tabla('adscripciones')->set_fila_columna_valor(0,'estado','E5'); } elseif($tipos[4]) { $this->get_relacion()->tabla('adscripciones')->set_fila_columna_valor(0,'estado','E4'); } elseif($tipos[3]) { $this->get_relacion()->tabla('adscripciones')->set_fila_columna_valor(0,'estado','E3'); } elseif($tipos[2]) { $this->get_relacion()->tabla('adscripciones')->set_fila_columna_valor(0,'estado','E2'); } elseif($tipos[1]) { $this->get_relacion()->tabla('adscripciones')->set_fila_columna_valor(0,'estado','E1'); } else{ $this->get_relacion()->tabla('adscripciones')->set_fila_columna_valor(0,'estado','AL'); } } // REVISAR /* function conf_fila__renglones($fila) { if (($this->s__datos[$fila]['columna_condicion'] == true) ) { $this->dep('renglones')->ef('descripcion')->set_solo_lectura(true); } else { $this->dep('renglones')->ef('descripcion')->set_solo_lectura(false); } } */ } ?>

Hola Cristian,

creo que el punto esta en este metodo, fijate que vos dentro del if al pedir el nombre de archivo estas direccionando dentro de un arreglo $this->s__nombre_archivo = $datos[‘res_concurso_adsc’][‘name’].

Por otro lado, el tipo del campo en la bd es bytea… osea que esta esperando un puntero a un binario en el mejor de los casos.
Creo que lo que te esta faltando es justamente esto ultimo, una vez que moviste el archivo, hacer un fopen y luego usar set_blob para indicarle el recurso, de esa manera el DT puede grabar el archivo.

Saludos

Buen día!
En mi caso creo que quiero hacer exatamente lo contrario…
-Tengo un Multilinea que contiene un ef_upload.
-En la base de datos, lo único que preciso guardar es el nombre del archivo (no la URL ) eso lo manejo de otra manera.
-El archivo en si, se aloja en un directorio.

Unos de los problemas que tengo es que no me renombra el archivo si lo que intento hacer es un reemplazo del mismo por uno nuevo.
Caso puntual:

  1. El ml ya tiene cargado al menos un archivo, un reistro al menos en el ML.
  2. Se agrega un nuevo archivo, es decir, un nuevo registro para el ML.
  3. En el mismo momento se intenta cambiar el archivo que ya estaba dado de alta.
    4)Al guardar, mediante evento modificacion del ML, ocurre lo siguiente:
    a)Se guarda correctamente el archivo en el dir y el nombre del mismo en la BD.
    b)El archivo que se intentó modificar se reemplaza correctamente por el nuevo, pero no le asigna el nombre que debería, si nó que guarda con el nombre original.

Hola Luis,

Que nombre le deberia dar?, si cambia el nombre que pasa con el archivo anterior?, recorda que el destino de move_uploaded_file lo decidis vos y por tanto tambien el nombre del archivo en disco.

Saludos

Ante todo muchas gracias por la celeridad!
Pude encontrar la solución el siguiente thread: http://foro.comunidad.siu.edu.ar/index.php?topic=3628.msg61516.

Que nombre le deberia dar?, si cambia el nombre que pasa con el archivo anterior?, recorda que el destino de move_uploaded_file lo decidis vos y por tanto tambien el nombre del archivo en disco.
. Ese hilo hace referencia al origen de mi error: validación de un campo obligatorio de tipo ef_upload dentro de un ML, siempre que tenga al menos un registro guardado, con el primer registro al guardar no había problemas. Respecto de tu consulta, si te parece puedo compartir el CI en este o el otro thread. [b]Para tener en cuenta[/b]: Estoy trabajando con la versión [b]toba_2.7.6[/b] y para mi solución me bastó con reemplazar el archivo: nucleo/componentes/interface/efs/toba_ef_upload.php original por el que se indica en ésta versión: http://repositorio.siu.edu.ar/trac/toba/browser/trunk_versiones/2.7/php/nucleo/componentes/interface/efs/toba_ef_upload.php?rev=7077. El único detalle que me quedó fue un Warning que aún no le encontré solución, calculo que falta definir correctamente un array: ``` Warning: Cannot use a scalar value as an array in /home/hernan/www/toba_2.7.6/php/nucleo/componentes/interface/efs/toba_ef_upload.php ``` . Desde ya muchas gracias y a la orden!

Hola Luis,

Como gustes, por ahi en otro hilo estaria mas ordenado.

[b]Para tener en cuenta[/b]: Estoy trabajando con la versión [b]toba_2.7.6[/b] y para mi solución me bastó con reemplazar el archivo: nucleo/componentes/interface/efs/toba_ef_upload.php original por el que se indica en ésta versión: http://repositorio.siu.edu.ar/trac/toba/browser/trunk_versiones/2.7/php/nucleo/componentes/interface/efs/toba_ef_upload.php?rev=7077. El único detalle que me quedó fue un Warning que aún no le encontré solución, calculo que falta definir correctamente un array: ``` Warning: Cannot use a scalar value as an array in /home/hernan/www/toba_2.7.6/php/nucleo/componentes/interface/efs/toba_ef_upload.php ``` .
Eso puede ser porque hay varias versiones de diferencia entre la revision que marcaste y la version que estas usando, lo mas cercano al archivo que copiaste es la version 2.7.13.. en cualquier caso, ya no deberias estar trabajando sobre dicha rama... es algo que no tiene soporte hace mas de 2 años.

Saludos