Como Subir archivos desde ASP.NET

Fecha: 03/Dic/2004 (03/12/04)
Autor: Juan Manuel Li Arce - jli_arce@hotmail.com

 


Existen muchos ejemplos de como subir archivos a el servidor por medio de paginas Asp . Net pero ne he encontrado ("en lo personal") ninguno que me diga por que si se intenta subir un archivo de mas de N cantidad megas de tamaño en disco me indique un error, en este articulo vamos a tratar de explicar como podemos controlar el tamaño que el servidor nos va a permitir que nosotros subamos.

Bueno para comenzar vamos a explicar como hacer lo primero para aquellos que no lo sepan o por si quieren volver a dar un repaso. vamos a explicarlo por pasos para no perdernos en el camino;

1.- Lo primero es crear una aplicación Asp.Net en nuestro Visual Estudio

2.- Después agregamos un nuevo WebForm a nuestro proyecto.

3.- A continuación agregamos un Input File a nuestro proyecto ya sea arrastrando desde la barra de herramientas o agregando el código HTML siguiente:

<input type="File" id="txtUpload" runat="Server" NAME="txtUpload" >

4.- importamos el namespaces System.IO

5.- Agregamos un botón a el formulario llamado btnUpload y una label llamada Mensaje

6.- y Agregamos el siguiente codigo a el evento click del botoncontinuación sigue código en Visual Basic (o C# o C++.NET):

Private Sub btnUpload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Obtenemos la ruta donde el archivo se va a guardar en el servidor
    Dim TargetPath = "d:\files\" & Path.GetFileName(MyFile.PostedFile.FileName)
    'y por ultimo se envia el archivo a el servidor esto e lo que hace que el archivo se
    ' envie al el servidor

    MyFile.PostedFile.SaveAs(TargetPath)
   'por ultimo se le envia un mensaje al usuario avisandole el exito de su operación
   'si estas creando directorios dinamicamente para evitar que marque un error por que el
   'directorio no existe puedes crear el directorio por medio de la siguiente instruccion
   ' Directory.CreateDirectory("/path")
    ' "/path" =la ruta donde se guardara el archivo en el servidor

    mensaje.Text = "Tu archivo se recibio correctamente en:: " & TargetPath & ""
End
Sub


7.- con esto tenemos a nuestra aplicación funcionando, que maravilla estamos subiendo archivos a nuestro servidor por medio de asp .net pero que pasa cuando unos de nuestro usuarios tratan de enviar un archivo de 4.2 MB o mas, mmmm...

Nos mandara un error que no se pudo subir el archivo ahora vamos a ver por que pasa esto.

Modificando la configuración por Default.

lo que esta pasando en estos momentos es que en la configuración de nuestro servidor esta una política donde dice que no se debe permitir que un usuario mande mas de esa cantidad de KB a el servidor por seguridad... se preguntaran se puede solucionar esto?...Pues déjenme decirles que si vamos a ver la forma de resolverlo en unos pocos pasos.

Como les comentaba nuestro servidor viene configurado por default con alguna opciones, pero como todo podemos cambiar esas opciones, ahora vamos a la parte de la configuración que en estos momentos nos interesa el elemento del archivo de configuración que lo que hace es que Configura las opciones del motor de tiempo de ejecución para HTTP de ASP.NET. Esta sección puede declararse en los equipos, sitios, aplicaciones o subdirectorios... según la pagina de MSDN latinoamerica. y esta posicionado en

< configuration>
< system.web>
<httpRuntime>

uno de los atributos de este elemento es:

maxRequestLength : Indica el tamaño de archivo máximo que ASP.NET puede cargar. Este límite puede evitar los ataques de denegación de servicio que se producen cuando los usuarios envían archivos de gran tamaño al servidor. El tamaño se especifica en kilobytes. El valor predeterminado es 4096 KB (4 MB).

Modificando este atributo podemos indicarle a nuestro servidor el tamaño máximo de archivos que puede recibir, algo que se me estaba escapando esto no únicamente se puede modificar en el archivo machin.config si no que también en la configuración de nuestra aplicación, me refiero al web.config.

Por ultimo te muestro la línea que viene el el archivo machine.config donde se tienen que hacer los cambios que requiera tu aplicación.

<httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100"/>

 

 


ir al índice