Usar Visual C# para cargar un archivo en un sitio web

En este artículo se describe cómo cargar un archivo con Microsoft Visual C#.

Versión del producto original:   Visual C#, ASP.NET, Internet Information Services
Número de KB original:   816150

Introducción

En este artículo paso a paso se explica cómo cargar un archivo de imagen existente de la unidad de disco duro local en un sitio Web. Un control de entrada se usa para cargar una imagen desde el equipo local. Este archivo que se está cargando se valida con el servidor para asegurarse de que no se sobrescribe un archivo existente que ya se ha cargado. El archivo cargado se valida si existe en el servidor. En este artículo se usa el EncType atributo del formulario para obtener la funcionalidad.

Requirements

En este artículo se supone que está familiarizado con los siguientes temas:

  • Aplicaciones web
  • ASP.NET

En la siguiente lista se describen el software y la infraestructura de red recomendados que necesita:

  • Visual C# .NET o Visual C #
  • Internet Information Services (IIS)

Crear un formulario web de ASP.NET

  1. Inicie Visual Studio .NET o Visual Studio.

  2. En el menú Archivo, elija Nuevo y, a continuación, haga clic en Proyecto.

    Nota

    En Visual Studio, elija nuevo en el menú archivo y, a continuación, haga clic en sitio web.

  3. En tipos de proyecto, haga clic en proyectos de Visual C#. En plantillas, haga clic en ASP.net aplicación web.

    Nota

    En Visual Studio, seleccione Visual C# a la derecha del idioma. En plantillas, haga clic en sitio web de ASP.net.

  4. En el cuadro Ubicación , escriba la siguiente ubicación y, a continuación, haga clic en Aceptar:
    http://WebServerName/ApplicationName

    Nota

    Webservername es un marcador de posición para el nombre de su servidor Web. ApplicationName es un marcador de posición para el nombre de la aplicación.

    De forma predeterminada, se crea WebForm1. aspx .

    Nota

    En Visual Studio, seleccione http en la parte derecha de Ubicacióny, a continuación, escriba <http://WebServerName> .

  5. En el menú Ver , haga clic en origen html.

    Nota

    En Visual Studio, haga clic en código en el menú Ver .

Modificación de los atributos de formulario

En la ventana HTML de WebForm1, reemplace la etiqueta del formulario por lo siguiente:

<form id="Form1" method="post" runat="server" EncType="multipart/form-data" action="WebForm1.aspx">

El EncType atributo especifica el formato de los datos que se envían. El explorador usa este atributo para codificar la información que se envía al servidor. El atributo Action de este código especifica que la página procesará la solicitud. De forma predeterminada, el atributo Method del formulario está establecido en post para que pueda enviar grandes cantidades de datos en la transacción.

Agregue el control de entrada para especificar el archivo que desea cargar en el servidor

  1. En la ventana HTML de WebForm1, agregue el siguiente código entre las etiquetas de apertura y cierre <form> :

    <INPUT id="oFile" type="file" runat="server" NAME="oFile">
    

    Este control de entrada especifica el archivo que desea cargar en el servidor.

  2. Puede Agregar una cadena de texto delante del control para preguntarle al usuario. Escriba el siguiente texto delante del control de entrada en la ventana HTML de WebForm1:

    Seleccione el archivo de imagen que desea cargar en el servidor:

Agregar un control de botón

  1. En la ventana HTML de WebForm1, agregue el siguiente código entre las etiquetas de apertura y cierre <form> , después del código de control de entrada:

    <asp:button id="btnUpload" type="submit" text="Upload" runat="server"></asp:button>
    
  2. Este control de botón se usa para cargar el archivo que especificó en el control de entrada.

Crear un control panel que contenga una etiqueta única para mostrar el resultado

En la ventana HTML de WebForm1, agregue el siguiente código entre las etiquetas de apertura y cierre <form> , después del código de control de botón:

<asp:Panel ID="frmConfirmation" Visible="False" Runat="server">
    <asp:Label id="lblUploadResult" Runat="server"></asp:Label>
</asp:Panel>

Este código se usa para mostrar el mensaje para indicar si la carga de archivos se ha realizado correctamente. Para mostrar este resultado, se crea un control panel que contiene una sola etiqueta.

Cargar el archivo en el evento de clic del botón

El código de esta sección recupera el archivo del sistema de archivos local, comprueba si el archivo ya existe en el servidor y, a continuación, carga el archivo en el sitio Web. Para agregar este código, siga estos pasos:

  1. Haga doble clic en el botón cargar que se creó en la sección botón Agregar un control de botón de este artículo para crear un controlador de eventos para el Click evento del control botón.

  2. Agregue el siguiente código en la parte superior de la ventana código :

    using System.IO;
    
  3. Agregue el siguiente código al Click controlador de eventos para el botón cargar :

    string strFileName;
    string strFilePath;
    string strFolder;
    strFolder = Server.MapPath("./");
    // Retrieve the name of the file that is posted.
    strFileName = oFile.PostedFile.FileName;
    strFileName = Path.GetFileName(strFileName);
    if(oFile.Value != "")
    {
        // Create the folder if it does not exist.
        if(!Directory.Exists(strFolder))
        {
            Directory.CreateDirectory(strFolder);
        }
        // Save the uploaded file to the server.
        strFilePath = strFolder + strFileName;
        if(File.Exists(strFilePath))
        {
            lblUploadResult.Text = strFileName + " already exists on the server!";
        }
        else
        {
            oFile.PostedFile.SaveAs(strFilePath);
            lblUploadResult.Text = strFileName + " has been successfully uploaded.";
        }
    }
    else
    {
        lblUploadResult.Text = "Click 'Browse' to select the file to upload.";
    }
    // Display the result of the upload.
    frmConfirmation.Visible = true;
    
  4. En el menú Archivo, haga clic en Guardar todo.

Comprobar que la acción de carga funciona

  1. En el menú depurar , haga clic en iniciar para compilar y ejecutar la aplicación. Aparece un cuadro de texto y un botón de comando.

  2. Escriba la ruta de acceso del archivo de imagen en el cuadro de texto o haga clic en examinar para buscar el archivo de imagen en el equipo local.

  3. Haga clic en cargar para enviar el archivo al servidor. Si el archivo es único, recibirá un mensaje que indica que la carga se ha realizado correctamente. Si el archivo ya existe en el servidor, recibirá un mensaje apropiado. Los archivos que se cargan desde esta aplicación se guardan en la ubicación: C:\inetpub\wwwroot\ApplicationName en el disco duro local.

  4. Para que esta aplicación funcione en .NET Framework, permita el acceso de control total al usuario ASPNET . Para ello, siga estos pasos:

    1. Busque la carpeta de la aplicación en el explorador de Windows. La ruta de acceso es C:\inetpub\wwwroot\ApplicationName .

    2. Haga clic con el botón secundario en la carpeta applicationName y haga clic en propiedades. Aparece el cuadro de diálogo propiedades de ApplicationName .

    3. Haga clic en la pestaña Seguridad.

    4. Haga clic en Agregar. Aparece el cuadro de diálogo Seleccionar usuarios o grupos .

      Nota

      En Visual Studio, aparece el cuadro de diálogo Seleccionar usuarios, equipos o grupos .

    5. Escriba ASPNET en el cuadro Escriba los nombres de objeto que desea seleccionar y, a continuación, haga clic en Aceptar.

    6. En el cuadro de diálogo propiedades de ApplicationName , haga clic en el usuario ASPNET en la lista nombres de grupos o usuarios .

    7. En permitir, active la casilla de verificación control total y, a continuación, haga clic en Aceptar.

Enumerar código completo

  • WebForm1. aspx

    <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false"
       Inherits="Howto.WebForm1" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
       <HEAD>
          <title>WebForm1</title>
          <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
          <meta name="CODE_LANGUAGE" Content="C#">
          <meta name="vs_defaultClientScript" content="JavaScript">
          <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
       </HEAD>
       <body MS_POSITIONING="GridLayout">
          <form id="Form1" method="post" runat="server" EncType="multipart/form-data" action="WebForm1.aspx">
             Image file to upload to the server: <INPUT id="oFile" type="file" runat="server" NAME="oFile">
             <asp:button id="btnUpload" type="submit" text="Upload" runat="server"></asp:button>
             <asp:Panel ID="frmConfirmation" Visible="False" Runat="server">
                <asp:Label id="lblUploadResult" Runat="server"></asp:Label>
             </asp:Panel>
          </form>
       </body>
    </HTML>
    
  • WebForm1.aspx.cs

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.IO;
    namespace **ApplicationName** {
    /// <summary>
    /// Summary description for WebForm1.
    /// </summary>
    public class WebForm1 : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Button btnUpload;
        protected System.Web.UI.WebControls.Label lblUploadResult;
        protected System.Web.UI.WebControls.Panel frmConfirmation;
        protected System.Web.UI.HtmlControls.HtmlInputFile oFile;
    
        private void Page_Load(object sender, System.EventArgs e)
        {
        // Put user code to initialize the page here
        }
        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
        // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            InitializeComponent();
            base.OnInit(e);
        }
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.btnUpload.Click += new System.EventHandler(this.btnUpload_Click);
            this.Load += new System.EventHandler(this.Page_Load);
        }
        #endregion
    
        private void btnUpload_Click(object sender, System.EventArgs e)
        {
            string strFileName;
            string strFilePath;
            string strFolder;
            strFolder = Server.MapPath("./");
            // Get the name of the file that is posted.
            strFileName = oFile.PostedFile.FileName;
            strFileName = Path.GetFileName(strFileName);
            if(oFile.Value != "")
            {
                // Create the directory if it does not exist.
                if(!Directory.Exists(strFolder))
                {
                    Directory.CreateDirectory(strFolder);
                }
                // Save the uploaded file to the server.
                strFilePath = strFolder + strFileName;
                if(File.Exists(strFilePath))
                {
                    lblUploadResult.Text = strFileName + " already exists on the server!";
                }
                else
                {
                    oFile.PostedFile.SaveAs(strFilePath);
                    lblUploadResult.Text = strFileName + " has been successfully uploaded.";
                }
            }
            else
            {
                lblUploadResult.Text = "Click 'Browse' to select the file to upload.";
            }
            // Display the result of the upload.
            frmConfirmation.Visible = true;
        }
    }
    

Nota

El código generado en Visual Studio es diferente del código generado en Visual Studio .NET.

Solución de problemas

  1. Abra el archivo de Machine.config que se encuentra en el equipo en la carpeta config en la ruta de acceso donde instaló el tiempo de ejecución.
  2. Busque la <processModel> sección en el archivo de Machine.config , cambie el user y los password atributos por el nombre y la contraseña del usuario que desea W3wp.exe o Aspnet_wp.exe para ejecutar y, a continuación, guarde el archivo de Machine.config .
  3. Busque la carpeta archivos temporales de ASP.net que se encuentra en la carpeta config . Haga clic con el botón secundario en la carpeta Temporary ASP.net files y, a continuación, haga clic en propiedades.
  4. En el cuadro de diálogo propiedades de archivos temporales de ASP.net , haga clic en la pestaña seguridad .
  5. Haga clic en Avanzadas.
  6. En el cuadro de diálogo configuración de control de acceso para archivos temporales de ASP.net , haga clic en Agregar.
  7. En el cuadro de diálogo, escriba el nombre de usuario en el cuadro nombre y, a continuación, haga clic en Aceptar.
  8. En el cuadro de diálogo entrada de permiso para archivos temporales de ASP.net , concédale permisos completos al usuario y, a continuación, haga clic en Aceptar para cerrar el cuadro de diálogo propiedades de los archivos de ASP.net temporales .

Referencias