Los formularios en aplicaciones web son la forma básica de comunicación entre el cliente y el servidor. Una de las cosas que se puede hacer con ellos es subir ficheros para su tratamiento o almacenamiento. Desde el punto de vista de las tecnologías del lado cliente, esto es muy sencillo, puesto que sólo hay que definir un “input” de tipo “file” y un botón de envío del formulario…

Las dificultades llegan cuando queremos recoger los datos subidos y tratarlos en la parte servidor.

 

A la hora de crear la base de datos deberemos tener cuidado con el tipo de datos que le ponemos al campo den se guardara el fichero, en el caso de SQL Server se usara el tipo de dato ntext o varbinary.

 

Los ficheros se pueden almacenar en la base de datos de varias maneras:

  • Guardado del fichero: la subida del fichero a una base de datos la podemos realizar codificando el fichero a un STRING BASE64 y guardando este STRING BASE64 en un campo de la base de datos el cual en el caso de SQL Server será de tipo ntext. También se puede almacenar directamente el fichero en la base de datos si lo codificamos como un Array de bytes ( bytes[ ] ), deberemos insertarlo en un campo de tipo varbinary. El inconveniente que supone almacenar los ficheros directamente en la base de datos es que si el flujo de trabajo es muy grande por mucho que se limite el tamaño de los ficheros que se suben la base de datos perderá rendimiento. La ventaja de realizar este tipo de subida es que al realiza un Back-Up de nuestra base de datos también se realizaría un Back-Up de los ficheros almacenados.

 

  • Almacenamiento en local: otro método para subir ficheros sería almacenar estos en un directorio sobre nuestro servidor. En este caso lo que almacenamos en la base de datos es la dirección del directorio donde se almacenan los ficheros seguido de “/nombre_fichero“.

 

  • Almacenamiento en Azure Storage: otro método para subir ficheros sería almacenar estos en Azure Storage. En este caso usaríamos la librería de Azure Storage disponible en Visual Estudio desde el “NuGet packages”, esta librería nos facilitará tanto el guardado de ficheros como el acceso a ellos. La ventaja de almacenarlos en Azure Storage es que el mantenimiento lo proporciona Microsoft. Para usar este servicio será necesario tener una cuenta de Azur

 

A la hora de guardar los ficheros debemos asegurarnos de guardar el fichero con su nombre y su extensión ya que Internet Explorer comprueba la extensión desde el nombre del fichero para poder mostrarlo y/o descargarlo.

 

Mi recomendación es usar el método de guardado en Azure Storage, ya que la base de datos no perderá rendimiento por muchos ficheros que se almacenen, se puede hacer un Back-Up del contenedor, se trata de un servicio respaldado por Microsoft y es relativamente barato.

 

 

Gabriel González Santander Natera