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"/>
|