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 используются для перехвата ошибок и отображения сообщения об ошибке.