Hace unos días Javi Navarro, alias Subgurim, se puso en contacto conmigo para comentarme que había puesto a disposición de todo el mundo un interesante control para ASP.NET. Se trata de FileUploadAJAX, un control sustitutivo del control para subida de archivos al servidor (control FileUpload) de ASP.NET 2.0. Este control usa una técnica de aspecto AJAX para conseguir una interfaz de usuario más agradable y sencilla.
Se trata de un control muy fácil de usar. Desde que lo descargue hasta que estuve gestionando archivos en un ejemplillo pasaron menos de 10 minutos. Aunque el control es una versión 1.0 y se puede mejorar en algunos aspectos vale la pena usarlo pues simplifica bastante el trabajo.
Una de las cosas más interesantes (aparte de que es AJAX) es que permite gestionar desde la misma página la subida de varios archivos, almacenando una lista y pudiendo borrarlos si nos arrepentimos. También gestiona automáticamente el renombrado de los archivos que ya existen o la creación de las carpetas en las que deseamos guardar lo que se sube.
Un ejemplo rápido
Descárgate el control desde http://fileuploadajax.subgurim.net/. Ahora para crear una primera aplicación de ejemplo haz lo siguiente:
1.- Crea un nuevo proyecto Web.
2.- En el cuadro de herramientas del diseñador de WebForms añade una referencia al control FUA.dll desde la carpeta en la que lo hayas descargado (botón derecho y "Elegir elementos..."). Así podrás usar el control con sólo arrastrarlo sobre tu formulario.
3.- Arrastra el control a tu formulario. Verás que aparece una caja de subir archivos como representación del mismo.
4.- En el cuadro de propiedades ajusta los textos que quieres usar para añadir, borrar, eliminar de la lista y para el progreso de subir los archivos. Ajusta también la propiedad MaxFiles con el número máximo de archivos que quieras subir desde la página (por ejemplo 3 o 5).
5.- En el código de la página añade una sentencia
Imports Subgurim.Controles
para hacer uso directo y fácil de las dos clases que ofrece el control.
6.- En el evento Load de la página escribe lo siguiente (VB.NET):
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If FileUploaderAJAX1.IsPosting Then
Dim archivo As HttpPostedFileAJAX
archivo = FileUploaderAJAX1.PostedFile
archivo.responseMessage_Uploaded = "Guardado: " + archivo.FileName
FileUploaderAJAX1.Save()
End If
End Sub
Es decir, si se está subiendo un archivo, obtenemos una referencia a un objeto de la clase HttpPostedFileAJAX que lo representa, y establecemos el texto a mostrar una vez se haya cargado como "Guardado: " seguido del nombre del archivo (así damos "feedback" al usuario sobre la subida del archivo). Finalmente lo guardamos. Al no especificar la ruta se guarda en el raíz de la aplicación.
Ahora ejecuta la aplicación. Verás que funciona muy bien y que la página no se recarga completa, sólo una parte, al más puro estilo AJAX. Muy fácil. Obviamente habría que crear una gestión de posibles errores, controlar aspectos como el tipo de archivo y su tamaño para que no se pueda subir cualquier cosa, etc... pero el ejemplo sirve para ver lo fácil que es usar el control.
Realmente no se trata de un control AJAX ya que por debajo usa marcos ocultos para conseguir su acción, pero el efecto obtenido es el mismo.
Es un control ingenioso y útil si bien necesitaría algunos toques a mayores para poder personalizar mejor la interfaz, corregir algún detalle (el texto de "uploding" no se muestra correctamente al subir archivos grandes, por ejemplo) y hacerlo más "empresarial". Adolece de los mismos posibles problemas que el control FileUpload de ASP.NET, pero es mucho más "cool" que este gracias a las capacidades asíncronas y algún detalle más como por ejemplo la traducción automática de rutas virtuales en físicas y el poder subir varios archivos desde la misma página.
Desde la página de descarga hay también documentación (algo escueta), unos foros y algunos ejemplos. Que lo disfrutes y gracias a Subgurim por dejar esto gratis :-)