Saul Remis

Developing ideas

Tutorial 7 ASP, Archivos en el servidor

Una actividad muy común en un sitio web es el envío de archivos desde el cliente y su almacenamiento en el servidor.

Componente FileUpload

La componente FileUpload encapsula el envío y recepción de un archivo en el servidor web.
Confeccionaremos una serie de páginas web para aprender a utilizar los métodos y propiedades de la clase FileUpload.
Crear un webform e implementar la siguiente interface:

Disponemos en el webform un objeto de la clase FileUpload que se encuentra en la pestaña de componentes “Estándar”
Para el evento clic de botón confirmar implementamos el siguiente código:

    protected void Button1_Click(object sender, EventArgs e)

    {

        this.FileUpload1.SaveAs(Server.MapPath(“.”)+”\\”+this.FileUpload1.FileName);

       this.Label1.Text = “Archivo subido”;

    }

El método SaveAs permite grabar el archivo que se subió al servidor. Debemos indicarle el camino del directorio donde se almacena y el nombre del archivo. Para obtener el path donde se almacena la página ASPX actual el objeto Server tiene el método MapPath y para obtener el nombre del archivo la propiedad llamada FileName.
Con esta única línea tenemos registrado en el servidor el archivo que se envió desde el navegador.

Almacenar el archivo en un subdirectorio.

Es una buena costumbre evitar almacenar los archivos que suben los usuarios en la misma carpeta donde se encuentran las páginas dinámicas ASPX.
Para almacenar los archivos en otro directorio primero debemos crear el directorio (por ejemplo creemos una carpeta imágenes en el directorio donde se aloja el sitio)
Creamos un nuevo botón y escribimos el siguiente código para el evento clic del objeto Button2:

    protected void Button2_Click(object sender, EventArgs e)

    {

        this.FileUpload1.SaveAs(Server.MapPath(“.”) + @”\imagenes\” + this.FileUpload1.FileName);

        this.Label1.Text = “Archivo subido a carpeta”;

    }

La carpeta imagenes debemos crearla en forma manual desde el administrador de archivos del sistema operativo. Luego cada archivo que se suba al servidor se almacenará en dicha carpeta.

Mostrar propiedades del archivo subido.

Crearemos un segundo webform para ver como accedemos a distintas propiedades de la clase FileUpload.
Disponemos sobre el webform un objeto de la clase FileUpload, un Button y cuatro Label.
Mostraremos el tamaño del archivo en bytes. El nombre del archivo y finalmente el tipo de archivo.

El código fuente para el evento clic es:

    protected void Button1_Click(object sender, EventArgs e)

    {

        this.FileUpload1.SaveAs(Server.MapPath(“.”) + “\\” + this.FileUpload1.FileName);

        this.Label2.Text = “Archivo subido”;

        this.Label3.Text += this.FileUpload1.PostedFile.ContentLength.ToString();

        this.Label4.Text += this.FileUpload1.PostedFile.FileName;

        this.Label5.Text += this.FileUpload1.PostedFile.ContentType;

    }

La propiedad PostedFile del control FileUpload almacena en:
ContentLength (el tamaño del archivo en bytes)
ContentType (El tipo de archivo)

El tamaño del archivo nos puede ser útil si queremos limitar el peso del mismo.

Validar la existencia de otro archivo con el mismo nombre.

Puede suceder que en la carpeta donde se almacena el archivo exista otro con el mismo nombre. Esto conlleva a que se pise el archivo antiguo por el nuevo.
Veamos otro webform donde validamos que no exista otro archivo con el mismo nombre, en caso afirmativo no permitimos su almacenamiento e informamos de tal situación:

protected void Button1_Click(object sender, EventArgs e)

    {

        if (File.Exists(Server.MapPath(“.”) + “\\” + this.FileUpload1.FileName))

        {

            this.Label2.Text = “Ya existe un archivo con ese nombre”;

        }

        else

        {

            this.FileUpload1.SaveAs(Server.MapPath(“.”) + “\\” + this.FileUpload1.FileName);

            this.Label2.Text = “Archivo subido”;

            this.Label3.Text += this.FileUpload1.PostedFile.ContentLength.ToString();

            this.Label4.Text += this.FileUpload1.PostedFile.FileName;

            this.Label5.Text += this.FileUpload1.PostedFile.ContentType;

        }

    }

Recordar incorporar la librería de ficheros:

Using System.IO;

El método estático Exists retorna true si ya existe un archivo con el nombre que le pasamos como parámetro, en caso negativo retorna false.
En caso que no exista el archivo procedemos a efectuar la registración del mismo en la carpeta de nuestro proyecto.

Saul Remis

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Información

Esta entrada fue publicada en agosto 7, 2012 por en .NET, Artículo, ASP, Programación C# y etiquetada con , , , , , , , .
A %d blogueros les gusta esto: