Отправка файла на веб-сайт с помощью Visual C#

В этой статье описывается, как отправить файл с помощью Microsoft Visual C#.

Исходная версия продукта: Visual C#, ASP.NET, службы IIS
Оригинальный номер базы знаний: 816150

Введение

В этой пошаговой статье описывается, как отправить существующий файл образа с локального жесткого диска на веб-сайт. Элемент управления Ввод используется для отправки изображения с локального компьютера. Этот отправляемый файл проверяется на сервере, чтобы убедиться, что вы не перезаписываете существующий файл, который уже был отправлен. Отправленный файл проверяется, если он существует на сервере. В этой статье для реализации функциональных возможностей используется EncType атрибут формы.

Требования

В этой статье предполагается, что вы знакомы со следующими разделами:

  • Веб-приложения
  • ASP.NET

В следующем списке описана рекомендуемая инфраструктура программного обеспечения и сети, которые вам нужны.

  • Visual C# .NET или Visual C#
  • Службы IIS

Создание веб-формы ASP.NET

  1. Запустите Visual Studio .NET или Visual Studio.

  2. В меню Файл выберите пункт Создать и затем пункт Проект.

    Примечание.

    В Visual Studio наведите указатель мыши на пункт Создать в меню Файл , а затем выберите веб-сайт.

  3. В разделе Типы проектов щелкните Проекты Visual C#. В разделе Шаблоны щелкните ASP.NET веб-приложение.

    Примечание.

    В Visual Studio выберите Visual C# справа от области Язык. В разделе Шаблоны щелкните ASP.NET веб-сайт.

  4. В поле Расположение введите следующее расположение и нажмите кнопку ОК:
    http://WebServerName/ApplicationName

    Примечание.

    WebServerName — это заполнитель для имени веб-сервера. ApplicationName — это заполнитель для имени приложения.

    По умолчанию создается WebForm1.aspx .

    Примечание.

    В Visual Studio выберите HTTP справа от области Расположение, а затем введите <http://WebServerName>.

  5. В меню Вид выберите источник HTML.

    Примечание.

    В Visual Studio щелкните Код в меню Вид .

Изменение атрибутов формы

В окне HTMLWebForm1 замените тег формы следующим:

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

Атрибут EncType задает формат публикуемых данных. Браузер использует этот атрибут для кодирования сведений, которые передаются на сервер. Атрибут действия в этом коде указывает, что страница будет обрабатывать запрос. По умолчанию атрибут метода формы имеет значение post, чтобы можно было отправлять большие объемы данных в транзакцию.

Добавьте элемент управления Вход, чтобы указать файл, который нужно передать на сервер.

  1. В окне HTMLWebForm1 добавьте следующий код между открывающим и закрывающим <form> тегами:

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

    Этот элемент управления Input указывает файл, который требуется передать на сервер.

  2. Вы можете добавить текстовую строку перед элементом управления, чтобы предложить пользователю. Введите следующий текст перед элементом управления Вход в окне HTMLWebForm1:

    Выберите файл изображения для отправки на сервер:

Добавление элемента управления Button

  1. В окне HTMLWebForm1 добавьте следующий код между открывающим и закрывающим <form> тегами после кода элемента управления Input:

    <asp:button id="btnUpload" type="submit" text="Upload" runat="server"></asp:button>
    
  2. Этот элемент управления Кнопка используется для отправки файла, указанного в элементе управления Вход.

Создание элемента управления Panel, содержащего одну метку для отображения выходных данных

В окне HTMLWebForm1 добавьте следующий код между открывающим и закрывающим <form> тегами после кода элемента управления Button:

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

Этот код используется для отображения сообщения, указывающее, успешно ли отправлен файл. Для отображения этих выходных данных создается элемент управления Panel, содержащий одну метку.

Отправка файла в событие Нажатие кнопки

Код в этом разделе извлекает файл из локальной файловой системы, проверяет, существует ли файл на сервере, а затем передает его на веб-сайт. Чтобы добавить этот код, выполните следующие действия.

  1. Дважды щелкните кнопку Отправить , созданную в разделе Добавление элемента управления Button этой статьи, чтобы создать обработчик событий для Click события элемента управления кнопка.

  2. Добавьте следующий код в верхней части окна Код :

    using System.IO;
    
  3. Добавьте следующий код в Click обработчик событий для кнопки Отправить :

    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. В меню Файл выберите команду Сохранить все.

Убедитесь, что действие отправки работает

  1. В меню Отладка щелкните Пуск , чтобы выполнить сборку и запустить приложение. Появится текстовое поле и кнопка команды.

  2. Введите путь к файлу изображения в текстовом поле или нажмите кнопку Обзор , чтобы найти файл изображения на локальном компьютере.

  3. Нажмите кнопку Отправить , чтобы отправить файл на сервер. Если файл уникален, вы получите сообщение о том, что отправка выполнена успешно. Если файл уже существует на сервере, вы получите соответствующее сообщение. Файлы, отправляемые из этого приложения, сохраняются в расположении: C:\inetpub\wwwroot\ApplicationName на локальном жестком диске.

  4. Чтобы приложение работало в платформа .NET Framework, разрешите пользователю ASPNETполный доступ. Для этого выполните следующие действия:

    1. Найдите папку приложения в Windows Обозреватель. Путь — C:\inetpub\wwwroot\ApplicationName.

    2. Щелкните правой кнопкой мыши папку ApplicationName и выберите пункт Свойства. Откроется диалоговое окно Свойства ApplicationName .

    3. Щелкните вкладку Безопасность.

    4. Нажмите кнопку Добавить. Откроется диалоговое окно Выбор пользователей или групп .

      Примечание.

      В Visual Studio откроется диалоговое окно Выбор пользователей, компьютеров или групп .

    5. Введите ASPNET в поле Введите имена объектов для выбора и нажмите кнопку ОК.

    6. В диалоговом окне Свойства ApplicationName выберите пользователя ASPNET в списке Группы или имена пользователей .

    7. В разделе Разрешить выберите поле Полный доступ проверка и нажмите кнопку ОК.

Полный список кода

  • 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;
        }
    }
    

Примечание.

Код, созданный в Visual Studio, отличается от кода, созданного в Visual Studio .NET.

Устранение неполадок

  1. Откройте файлMachine.config , расположенный на компьютере, в папке CONFIG по пути, по которому была установлена среда выполнения.
  2. <processModel> Найдите раздел в файле Machine.config, измените user атрибуты и password на имя и пароль пользователя, с которым вы хотите W3wp.exe или Aspnet_wp.exe, а затем сохраните файлMachine.config.
  3. Найдите папку Временные файлы ASP.NET , расположенную в папке CONFIG . Щелкните правой кнопкой мыши папку Временные файлы ASP.NET и выберите пункт Свойства.
  4. В диалоговом окне Свойства временных файлов ASP.NET перейдите на вкладку Безопасность .
  5. Нажмите кнопку Дополнительно.
  6. В диалоговом окне Параметры контроль доступа для временных файлов ASP.NET нажмите кнопку Добавить.
  7. В диалоговом окне введите имя пользователя в поле Имя и нажмите кнопку ОК.
  8. В диалоговом окне Запись разрешений для временных файлов ASP.NET предоставьте пользователю полные разрешения и нажмите кнопку ОК , чтобы закрыть диалоговое окно Свойства временных файлов ASP.NET .

Ссылки