icono_twiter
Daniel Hernandez del Peso

Consultor tecnológico de desarrollo de proyectos informáticos.

Ingeniero en Informática

Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factoría y formación

Somos expertos en Java/J2EE

Ver todos los tutoriales del autor

Fecha de publicación del tutorial: 2006-01-13

Tutorial visitado 15.549 veces Descargar en PDF
Upload de ficheros en .NET

Upload de ficheros en .NET

En el desarrollo de aplicaciones Web, puede resultar interesante o necesario realizar uploads (cargas) de ficheros desde el cliente al servidor. En este tutorial veremos como podemos hacerlo de forma sencilla y rápida en la plataforma de Microsoft.

Preparación del entorno

Una vez arrancado el Visual Studio, creamos un nuevo proyecto:

Vamos a crear un proyecto de aplicación Web ASP.NET de Visual Basic:

Y lo llamaremos, en este caso, UploadAutentia.

El asistente crea todos los ficheros necesarios para que la aplicación funcione correctamente:

Ahora ya tenemos todo listo y podemos empezar a hacer pruebas...

Creación del formulario Web

Abrimos el formulario (fichero WebForm1.aspx) y, en la vista de diseño

agregamos desde la lista de componentes (botón toolbox, se despliega al poner el puntero del ratón sobre el) un File Field (al que llamaremos filUpload) y dos Label, una encima y otra debajo (con nombres lblTitulo y lblResultado respectivamente) del File Field

Tenemos que decir al Visual Studio que los elementos que hemos creado van a ser elementos que se ejecuten en el servidor, para ello, pinchamos sobre ellos con el botón derecho del ratón y en el menú que se despliega seleccionamos la opción Run as Server Control:

También añadiremos un Submit Button, al que llamaremos btnSubmit, y que, al igual que hicimos con los otros componentes, especificaremos que se debe ejecutar como un control en el servidor:

Este es el aspecto final que tendrá el formulario:

Ahora, hacemos doble clic sobre el botón de submit que hemos añadido y se abre una ventana con el código Visual Basic de la clase que manejará el funcionamiento de la página aspx (el formulario que acabamos de crear):

En ese código hay dos procedimientos: el procedimiento Page_Load se ejecuta cuando se carga la página, y el btnSubmit_ServerClick se llama cuando se hace clic sobre el botón submit

A continuación vamos a añadir el código necesario en ambos procedimientos para realizar el upload de ficheros

Procedimiento Page_Load

El código de este procedimiento será el siguiente:

Private pathCompletoUpload As String


Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'Put user code to initialize the page here
    Dim pathAplicacion As String
    Dim carpetaUpload As String
    Dim directorio As String

    pathAplicacion = Request.PhysicalApplicationPath
    carpetaUpload = "upload"
    pathCompletoUpload = pathAplicacion & carpetaUpload


    directorio = Dir(pathCompletoUpload, FileAttribute.Directory)
    If (directorio = "") Then
        MkDir(pathCompletoUpload)
    End If



End Sub

El código en azul corresponde a una variable global de la clase, y por tanto accesible desde todos sus procedimientos, que almacenará la ruta física en la que se guardarán los ficheros que se deseen cargar en el servidor

El código en color púrpura es el que se encarga de crear dicha ruta. Hemos elegido que en este caso se almacenen los ficheros en una carpeta llamada "upload" en el directorio donde se encuentra ubicada la aplicación, que extraemos mediante el comando  Request.PhysicalApplicationPath

En el fragmento de código de color rojo se comprueba si la carpeta que vamos a usar existe ya, y en ese caso no se hace nada. Pero si no existe, mediante la llamada MkDir(pathCompletoUpload) creamos la carpeta.

Como se ha dicho anteriormente, este método se ejecuta al cargar la página. Ahora veamos el código que se ejecuta al presionar el botón de submit.

El procedimiento btnSubmit_ServerClick

El procedimiento quedará finalmente como sigue:

Private Sub btnSubmit_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubmit.ServerClick

    Dim fileName As String = filUpload.PostedFile.FileName()
    fileName = System.IO.Path.GetFileName(fileName)


    Try
        filUpload.PostedFile.SaveAs(pathCompletoUpload & "\" & fileName)
        lblResultado.InnerHtml = "<b><font color=""#0000FF"">La carga del fichero fue correcta</font></b>"


    Catch ex As Exception
        lblResultado.InnerHtml = "<b><font color=""#FF0000"">Se ha producido un error al cargar el fichero</font></b>"
    End Try

End Sub

El texto en rojo coge el nombre del fichero que se haya enviado. Primero en la línea de código Dim fileName As String = filUpload.PostedFile.FileName(),  cogemos el nombre del fichero del objeto del formulario (del File Field), que nos lo manda completo (con toda la ruta del fichero en el cliente) y luego nos quedamos sólo con el nombre del fichero propiamente dicho (con la llamada System.IO.Path.GetFileName(fileName))

El código en color azul es el que guarda en el servidor el fichero enviado, en la carpeta creada al cargar la página.

Los textos en púrpura y verde escriben en la etiqueta lblResultado el resultado de la operación.

Ya estamos en disposición de probar la aplicación completa...

Subiendo ficheros al servidor

Antes de empezar a utilizar la aplicación, hay que realizar un paso previo sin el cual ésta no funcionará.

Tal como se vio en el  tutorial de log4net publicado también en "Adictos al Trabajo", las aplicaciones .NET son ejecutadas en el servidor por un usuario especial, el usuario ASPNET. Para que la aplicación funcione, hay que dar a este usuario permisos de escritura en la carpeta en que se vayan a guardar los ficheros subidos. Para ello, pinchamos con el botón derecho sobre dicha carpeta (por defecto, c:\Inetpub\wwwroot\nombre_aplicacion) y seleccionamos "Propiedades":

y en la pantalla que se abre, vamos a la pestaña "Seguridad" y localizamos al usuario "ASPNET" en la lista. Una vez localizado, además de todos los permisos que tenga ya asignados hay que proporcionarle permiso de escritura en la carpeta:

Con esto conseguiremos que se puedan grabar los ficheros, por lo que ya estamos preparados para probar la aplicación. La abrimos en el navegador...

seleccionamos el fichero...

pulsamos "Enviar" y...

Tal como vemos, la carga se ha realizado (parece) correctamente. Comprobemos si es cierto. Vamos a la carpeta en que se ubica la aplicación (c:\Inetpub\wwwroot\UploadAutentia en nuestro ejemplo)

y comprobamos que ha aparecido una carpeta "upload":

y dentro de ella...

... El fichero que hemos enviado

Pues ya lo tenemos andando... Ahora os queda a vosotros el mejorar esta aplicación para adaptarla a vuestras necesidades.

Agradecimientos

Quiero agradecer a www.4guysfromrolla.com, que me ayudó a resolver gran parte de las dudas y problemas que me surgieron...

Conclusión

Espero que este tutorial os haya servido para resolver vuestras dudas, pero si no ha sido así, ya sabéis que en mi empresa, Autentia, estamos para ayudaros con vuestros desarrollos

A continuación puedes evaluarlo:

Regístrate para evaluarlo

Por favor, vota +1 o compártelo si te pareció interesante

Share |
Anímate y coméntanos lo que pienses sobre este TUTORIAL:

Fecha publicación: 2010-04-01-22:53:01

Autor: Nerfa

Estuvo genial Tu manual en ASP nose si me puedas ayudar Soy Programdor Junior y no se como hacer una bandeja de entrada en Asp me podrias Ayudar Si es Que se Puede hacer En ASP esa cuestion De eso depende que me quede en la empresa donde Laboro...

Fecha publicación: 2009-06-04-05:55:08

Autor:

[Juan Carlos Hernande] ok es muy bien el manualito ahoara necesito hacer lo mismo pero en c# en windows form me podrian ayudar

Fecha publicación: 2006-08-31-02:23:17

Autor:

[NATALIA] SEAN MAS ESPECIFICOS, DEN EJEMPLOS CLAROS POR FAVOR