Descarga de ficheros HTTP desde campos tipo BINARY en Base de Datos

Realiza la descarga de ficheros HTTP almacenados como Binary o Blob

descarga de ficheros httpCuando en una de nuestras aplicaciones web tenemos que manejar ficheros de subida y descarga, generalmente éstos son almacenados en el sistema de archivos del servidor local en forma de archivos en directorios anejos a la solución web. Sin embargo, nos podemos encontrar en ocasiones con aplicaciones ya existentes que disponen de archivos almacenados en base de datos, dentro de campos tipo OLE, BLOB o BINARY.

La forma de devolver al navegador el contenido de estos ficheros es a través del objeto Response del servidor de aplicaciones, al cual deberemos especificarle algunos parámetros para que el navegador pueda descargar correctamente cualquier tipo de archivos. No es trivial hacerlo a la primera pues las cabeceras del Response hay que establecerlas de forma completa. A continuación, presentamos dos fragmentos de código en PHP y C# que realizan esta operación.

PHP

<?php

// Especifica el tipo de descarga al navegador
header(‘Content-Description: File Transfer’); 

// Indica el tipo de archivo a descargar
header(‘Content-Type: application/octet-stream’);

// Nombre del fichero, !sin espacios en blanco¡
header(‘Content-Disposition: attachment; filename=dibujo.dwg’);

// Tipo de transferencia
header(‘Content-Transfer-Encoding: binary’);

// Control de caché
header(‘Expires: 0’);
header(‘Cache-Control: must-revalidate, post-check=0, pre-check=0’);
header(‘Pragma: public’);

// Vaciado de los cachés y envío del contenido al navegador
ob_clean();
flush();
// $contenido contiene el stream del fichero a enviar al navegador
echo $contenido;
exit;
?>

 

ASP.NET (C#)
// Limpiar buffer de response.
Response.Clear();
// Establece el tipo de archivo.
Response.ContentType = «application/octet-stream»;
// Indica el formato de descarga del fichero
Response.AddHeader(«Content-Disposition», «attachment;filename='» & filename.replace(» «,»-«) & «‘»);
// Envía los datos leídos de la base de datos al navegador
Response.BinaryWrite(data);
// Cierra el canal de envío.
Response.End();

 

Conclusiones

Está claro que almacenar en base de datos los ficheros tiene como ventaja las posibilidades de migración y la centralización del repositorio documental, a costa de unas mayores necesidades de espacio en el motor de base de datos así como un compromiso a la hora de manejar bases de datos de miles o millones de registros.

Post By Fran (5 Posts)

Francisco José Saiz-Ezquerra de Paz Desde 1998 desempeño mis funciones como Tecnólogo especializado en "Desarrollo de InternetApps y Arquitecturas Distribuidas". Después de varios años en empresas TIC en Cantabria y Madrid, emprendí un nuevo camino desde cero con NETPERCEPTIONS, empresa desde la que ofrezco servicios especializados de Consultoría y Desarrollo Tecnológicos.

Email to: franciscojose.saiz@resourcing.es

Website: →

Connect

, , , , , , , , , ,

No comments yet.

Deja un comentario

Leave your opinion here. Please be nice. Your Email address will be kept private.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies
Translate »