Algo que puede resultarnos muy útil en más de una ocasión es conocer cómo funciona la subida de ficheros a un directorio de nuestra aplicación web con ASP .NET. Antes de .NET el mecanismo para conseguir esto era un engorro y podía dar muchos quebraderos de cabeza, pero nada más fácil desde que existe .NET.
A continuación veremos cómo funciona.
El control FileUpload de ASP .NET 2.0
Insertar el control FileUpload de ASP .NET 2.0 en una página web es muy sencillo. Tan sólo hay que incluir el siguiente código:
<asp:FileUpload ID="iptFile" runat="server" />
El código del evento "submit" del botón de enviar el formulario sería el siguiente:
string baseDir = Server.MapPath("./UPLOAD_DIR/");
string fileName = Path.GetFileName( iptFile.PostedFile.FileName );
iptFile.PostedFile.SaveAs( baseDir + fileName );
Donde UPLOAD_DIR es la ruta relativa del directorio donde vamos a guardar los ficheros que subamos.
Hay que tener en cuenta que, para que la subida de ficheros funcione, es necesario otorgar permisos de escritura al usuario ASPNET (en Windows XP) o al usuario NETWORK_SERVICE (en Windows 2003) en el directorio UPLOAD_DIR.
Con estos sencillos pasos ya tendríamos habilitado el mecanismo de subida de ficheros.
El control input tipo ‘file’ de ASP .NET 1.1
En ASP .NET 1.1 no disponemos del control FileUpload, sin embargo, podemos utilizar el control input de html con tipo ‘file‘ y el atributo runat con valor server:
<input id="iptFile" type="file" runat="server" />
El código para el evento "submit" del botón de enviar el formulario sería exactamente el mismo y también tendremos que otorgar los mismos permisos al directorio de subida para conseguir que funcione.
¿Cómo aumentar el tamaño máximo permitido para los ficheros subidos?
Por defecto, el tamaño máximo de un fichero puede ser como máximo de 4MB. Para incrementar este límite podemos incluir el siguiente fragmento de código dentro de la sección <system.web> del fichero web.config (para una aplicación en particular) o en el fichero Machine.config (para todas las aplicaciones en general).
<httpRuntime executionTimeout="300" maxRequestLength="20480" />
Con el atributo executionTimeout indicaremos el tiempo en segundos tras el cual la operación se considerará como fallida (5 minutos en el ejemplo) y con el atributo maxRequestLength fijaremos el tamaño máximo permitido para el fichero en bytes (20MB en el ejemplo).