Guardar BLOB’s como ficheros en el servidor, sin almacenarlos en Base de Datos

Muy buenas a todos, en esta entrada os vamos a mostrar las nociones básicas y las pautas a seguir para guardar archivos en FileSystem (como ficheros en el sistema) en lugar de usar BLOB’s , los cuales ocupan espacio en la base de datos, esto supone un problema para versiones XE.

Esta nota servirá para liberar espacio en la base de datos.

Para guardar ficheros tipo BLOB o CLOB en nuestra máquina sin almacenarlos en la Base de Datos, tenemos una solución que nosotros hemos implementado y funciona perfectamente.

Se necesita crear dos procedimientos almacenados en Base de Datos, uno de subida y otro de descarga.

Subir archivos a FileSystem

  1. Crear un objeto de base de datos, tipo DIRECTORIO, con valor de un directorio, que vosotros decidais, donde vas a ir almacenando los BLOB’s. (No olvidar darle a ese directorio permisos de lectura y escritura).
    http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_5007.htm
  2. Crear una columna tipo BLOB en la tabla donde normalmente guardas los archivos.
  3. Crear una columna tipo BFILE el cual apuntará al directorio donde almacenaremos nuestros archivos.
  4. Crear un procedimiento almacenado en base de datos, que guarde el fichero en el directorio del servidor.
    El código de este procedimiento utiliza algunos paquetes de base de datos como UTL_FILE y DBMS_LOB.
    Por lo tanto, tendrás que construir un código que lo que haga es  la siguiente lógica (no incluido en la nota por su extensión, si alguien le interesa que se ponga en contacto con nosotros):

    • Primero, almacenar la imagen como BLOB en la tabla de BBDD.
    • Segundo, descargar la imagen almacenada en BBDD en el directorio del servidor.
    • Tercero, al campo BFILE apunta a la ruta (“directorio/imagen.jpg”) donde almacenamos el contenido del BLOB.
    • Cuarto, al BLOB almacenado en la tabla, le daremos el valor EMPTY_BLOB, de esta manera liberaremos la base de datos de espacio ocupado.

Descargar ficheros de FileSystem

  1. Para poder descargarlo crearás otro procedimiento, almacenado en la base de datos, el cual leerá el fichero del fileSystem que lo encontrará en la ruta ( BFILE) para poder bajarlo.
    El código de este procedimiento usa paquetes de base de datos como OWA_UTIL, WPG_DOCLOAD, DBMS_LOB y HTP, para descargar ficheros.
  2. Crear una página APEX, desde donde llamarás al procedimiento del paso 4, la llamada la harás tipo Before Header.
  3. Desde una página de APEX, crearás un botón que llame a la página anterior, lo que va a suceder es la ejecución de este paquete, ni siquiera veras una navegación real, y se descargará el fichero.

Estamos seguros que con estas indicaciones, no tendreis problemas para crear la subida y bajada de ficheros al FILESYSTEM y sereis capaces de hacer cosas chulas como este gestor documental que nosotros mismos hemos desarollado.

Captura

 

Lo dicho, si alguien necesita ayuda para implementar este gestor documental, poneros en contacto con nosotros.

2 comments on “Guardar BLOB’s como ficheros en el servidor, sin almacenarlos en Base de DatosAdd yours →

  1. Muy interesante este tutorial, es la solución ideal para solventar el problema que tenemos en la BBDD XE a la hora de almacenar documentos e imágenes.
    Me interesa mucho y me gustaría saber conocer más detalle de como implementarlo. La idea la he captado, pero creo que me falta experiencia para poder llevar a la practica esto.
    Es posible obtener los pasos a seguir con más detalles?. Un tutorial con los pasos a seguir con algo más de detalle sería genial :)

    Muchas Gracias y un saludo,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">