Учебники

ASP.NET — загрузка файлов

ASP.NET имеет два элемента управления, которые позволяют пользователям загружать файлы на веб-сервер. Как только сервер получит опубликованные данные файла, приложение сможет его сохранить, проверить или проигнорировать. Следующие элементы управления позволяют загружать файлы:

  • HtmlInputFile — серверный элемент управления HTML

  • FileUpload — и веб-контроль ASP.NET

HtmlInputFile — серверный элемент управления HTML

FileUpload — и веб-контроль ASP.NET

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

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

После того как пользователь ввел имя файла в текстовое поле, введя имя или просмотрев, можно вызвать метод SaveAs элемента управления FileUpload для сохранения файла на диск.

Основной синтаксис FileUpload:

<asp:FileUpload ID= "Uploader" runat = "server" />

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

свойства Описание
FileBytes Возвращает массив байтов в файле для загрузки.
FileContent Возвращает объект потока, указывающий на файл для загрузки.
Имя файла Возвращает имя файла для загрузки.
HasFile Указывает, есть ли у элемента управления файл для загрузки.
PostedFile Возвращает ссылку на загруженный файл.

Размещенный файл инкапсулируется в объект типа HttpPostedFile, к которому можно получить доступ через свойство PostedFile класса FileUpload.

Класс HttpPostedFile имеет следующие часто используемые свойства:

свойства Описание
ContentLength Возвращает размер загруженного файла в байтах.
Тип содержимого Возвращает MIME-тип загруженного файла.
Имя файла Возвращает полное имя файла.
InputStream Возвращает объект потока, указывающий на загруженный файл.

пример

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

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

Файл загружен

Код файла содержимого имеет следующий вид:

<body>
   <form id="form1" runat="server">
   
      <div>
         <h3> File Upload:</h3>
         <br />
         <asp:FileUpload ID="FileUpload1" runat="server" />
         <br /><br />
         <asp:Button ID="btnsave" runat="server" onclick="btnsave_Click"  Text="Save" style="width:85px" />
         <br /><br />
         <asp:Label ID="lblmessage" runat="server" />
      </div>
      
   </form>
</body>

Код за кнопкой сохранения выглядит так:

protected void btnsave_Click(object sender, EventArgs e)
{
   StringBuilder sb = new StringBuilder();
   
   if (FileUpload1.HasFile)
   {
      try
      {
         sb.AppendFormat(" Uploading file: {0}", FileUpload1.FileName);
         
         //saving the file
         FileUpload1.SaveAs("<c:\\SaveDirectory>" + FileUpload1.FileName);
      
         //Showing the file information
         sb.AppendFormat("<br/> Save As: {0}",  FileUpload1.PostedFile.FileName);
         sb.AppendFormat("<br/> File type: {0}",    FileUpload1.PostedFile.ContentType);
         sb.AppendFormat("<br/> File length: {0}",  FileUpload1.PostedFile.ContentLength);
         sb.AppendFormat("<br/> File name: {0}",  FileUpload1.PostedFile.FileName);
         
      }catch (Exception ex)
      {
         sb.Append("<br/> Error <br/>");
         sb.AppendFormat("Unable to save file <br/> {0}", ex.Message);
      }
   }
   else
   {
      lblmessage.Text = sb.ToString();
   }
}

Обратите внимание на следующее:

Класс StringBuilder является производным от пространства имен System.IO, поэтому его необходимо включить.

Блоки try и catch используются для перехвата ошибок и отображения сообщения об ошибке.