Buena tarde, el siguiente código tomado de toba referencia, me permite cargar y descargar archivos; pero al momento de la descarga muestra un valor encriptado(fa8787868ab989…) en hexadecimal, lo que deseamos es que muestre el nombre y la extensión (*.doc, *.xls, *.pdf…) de dicho archivo.
$fp_imagen = $this->get_relacion()->tabla(‘formatos’)->get_blob(‘fmd_archivo’);
if (isset($fp_imagen)) {
//-- Se necesita el path fisico y la url de una archivo temporal que va a contener la imagen
$temp_nombre = md5(uniqid(time()));
$temp_archivo = toba::proyecto()->get_www_temp($temp_nombre);
//-- Se pasa el contenido al archivo temporal
$temp_fp = fopen($temp_archivo['path'], 'w');
stream_copy_to_stream($fp_imagen, $temp_fp);
fclose($temp_fp);
$tamaño = round(filesize($temp_archivo['path']) / 1024);
//-- Se muestra la imagen temporal
$registro['vista_previa'] = "<a href='{$temp_archivo['url']}' >Abrir Archivo "."</a>";
$registro['fmd_archivo'] = 'Tamaño: '.$tamaño. ' KB';
} else {
$registro['fmd_archivo'] = null;
}
Tengo una programación que utiliza un ef_upload, para la carga de archivos… pero el código que utilizo es un poco mas sencillo…
405 function evt__form_fotos__alta($datos)
406 {
407 $datos = $this->procesar_archivo($datos);
408
409 $this->tabla('archivo')->nueva_fila($datos);
410 $this->tabla('archivo')->resetear_cursor();
411 }
432 function procesar_archivo($datos)
433 {
434 // guardo la dirección y nombre del archivo temporal donde se cargó
435 // la imagen.
436 $archivo = $datos['archivo']['tmp_name'];
437
438 // formateo correctamente el campo archivo que se guarda en la base de
439 // datos
440 $datos['archivo'] = $datos['archivo']['name'];
441
442 // determino el directorio donde dejar el archivo definitivo
443 $proyecto = toba::memoria()->get_dato_operacion('proyecto');
444
445 $fecha = $this->tabla('visita')->get_columna('fecha');
446
447 $dir_visita = visita::directorio($fecha, $proyecto);
448
449 $dir_archivo = $dir_visita.'/'.$datos['archivo'];
450
451 // copio el archivo temporal al directorio definitivo
452 move_uploaded_file($archivo, $dir_archivo);
453
454 $datos = $this->limpiar_datos($datos, 'archivo');
455
456 return $datos;
457 }
405 - este es el evento que se dispara cuando el usuario pulsa AGREGAR en el formulario, $datos contiene los datos que recogió el ef_upload.
436 - el ef_upload se llama ARCHIVO, por lo que $datos[‘archivo’][‘tmp_name’] es el path completo (incluido el nombre) donde fue a parar el archivo que están subiendo.
440 - $datos[‘archivo’][‘name’] es el nombre del archivo, sin el path. → creo que este es el dato que estás buscando.
Ya se soluciona correctamente, la carga y descarga de los archivos.
El problema se reduce ahora, a que las imágenes, archivos pdf, se abren en una ventana nueva del navegador, sacandome de la aplicación, como obligo a que siempre muestre la ventana de dialogo de descarga ??
Eso, si no me equivoco es una configuración del navegador (Si es firefox, creo que en Aplicaciones en las Herramientas, podés configurar esto). La primera vez que se abre te pregunta que hacer con cierto tipo de archivo… y de ahí en adelante puede hacerlo siempre de la misma forma.
Igual, si lo manejás con headers, podés ponerle algo como force-download.
En el manual que postee, hay un ejemplo de descarga de archivos que usa los headers para la descarga.