lunes, 9 de enero de 2012

User Control para Carga de Archivos (ASCX)

Realizar carga de archivos (file upload) en aplicaciones web es una tarea muy común. En ASP.NET puede efectuarse con facilidad por medio del control FileUpload, sin embargo, cuando la página ASPX se procesa en el servidor y el response se envía al browser, dicho control se convierte en una etiqueta del tipo <input type = "file" ... /> y por lo tanto, hereda las restricciones establecidas por el browser sobre dicha etiqueta:

- Sus propiedades no son accesibles a través del DOM
- Su valor (archivo seleccionado) se pierde entre los diferentes postbacks que ocurran a la página.

De acuerdo a lo anterior, si se realiza alguna validación del lado del servidor que impida que se acepte ese formulario, el usuario se verá obligado a corregir el error de validación y además, volver a seleccionar el archivo que desea cargar.

Para evitar estos inconvenientes, se puede desarrollar un control que permita cargar un archivo a un directorio temporal al servidor y mantener ese valor entre los distintos postbacks, de forma que una vez seleccionado y cargado un archivo, no haya necesidad de volver a realizar ese proceso, aún cuando no se cumplan otras validaciones en el formulario.


El control implementa las siguientes propiedades:

public string PostedMimeType: Mime Type del archivo cargado

public bool HasFile: Indica si se ha cargado un archivo al control

public string PostedFileName: Devuelve el nombre del archivo cargado (El nombre del archivo que el usuario ha cargado)

public byte[] PostedFileBytes: Devuelve un arreglo de bytes con el contenido del archivo cargado


El siguiente enlace es un pequeño proyecto (VS 2008 / C#) que implementa el control mencionado:

Descargar FileUploadTest.zip

No hay comentarios:

Publicar un comentario