Поделиться через


Практическое руководство. Передача файлов с помощью серверного веб-элемента управления FileUpload

Обновлен: Ноябрь 2007

Серверный веб-элемент управления FileUpload позволяет пользователям отправлять файл с их компьютера на сервер. Передаваемый файл отправляется на сервер как часть запроса обозревателя во время обратной передачи. После завершения передачи файла можно управлять файлом в коде.

ms227669.alert_note(ru-ru,VS.90).gifПримечание.

Максимальный размер файла, который можно передать на сервер, зависит от значения параметра конфигурации MaxRequestLength. При попытке передачи файла, чей размер превышает максимально допустимый размер, передача файла прекращается.

Передача файла с помощью серверного веб-элемента управления FileUpload

  1. Добавьте на страницу элемент управления FileUpload.

    ms227669.alert_note(ru-ru,VS.90).gifПримечание.

    Из соображений безопасности нельзя заранее загружать имя файла в элемент управления FileUpload.

  2. В обработчике события, например, события страницы Load, выполните следующие действия.

    1. Проверьте, что элемент управления FileUpload передал файл, протестировав его свойство HasFile.

    2. Проверьте имя или тип MIME файла, чтобы убедиться, что пользователи передали требуемый файл. Для проверки типа MIME объект HttpPostedFile должен предоставляться как свойство PostedFile элемента управления FileUpload. Тип MIME можно получить, проверив свойство ContentType переданного файла.

      ms227669.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

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

    3. Сохраните файл в указанном месте. Можно вызвать метод SaveAs объекта HttpPostedFile. Иначе можно обрабатывать переданный файл как байтовый массив или поток при помощи свойства InputStream объекта HttpPostedFile.

    В следующем примере показан способ обработки переданного файла. В коде расширение загруженного файла сравнивается с жестко заданным списком допустимых расширений. Все файлы с отличающимися расширениями отклоняются. Затем файл записывается в папку UploadedImages в текущем веб-узле. Переданный файл сохраняется с тем же именем, что и на клиентском компьютере. Свойство FileName элемента управления FileUpload используется потому, что свойство FileName объекта HttpPostedFile возвращает полный путь файла на клиентском компьютере.

    ms227669.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

    Не следует отображать пользователям путь и имя сохраненных файлов, подобные сведения могут быть использованы пользователями-злоумышленниками.

    Protected Sub Page_Load(ByVal sender As Object, 
            ByVal e As System.EventArgs) Handles Me.Load
        If IsPostBack Then
            Dim path As String = Server.MapPath("~/UploadedImages/")
            Dim fileOK As Boolean = False
            If FileUpload1.HasFile Then
                Dim fileExtension As String
                fileExtension = System.IO.Path. _
                    GetExtension(FileUpload1.FileName).ToLower()
                Dim allowedExtensions As String() = _
                    {".jpg", ".jpeg", ".png", ".gif"}
                For i As Integer = 0 To allowedExtensions.Length - 1
                    If fileExtension = allowedExtensions(i) Then
                       fileOK = True
                    End If
                Next
                If fileOK Then
                    Try
                        FileUpload1.PostedFile.SaveAs(path & _
                             FileUpload1.FileName)
                        Label1.Text = "File uploaded!"
                    Catch ex As Exception
                        Label1.Text = "File could not be uploaded."
                    End Try
                Else
                    Label1.Text = "Cannot accept files of this type."
                End If
            End If
        End If
    End Sub
    
    protected void Page_Load(object sender, EventArgs e)
    {
        if(IsPostBack)
        {
            Boolean fileOK = false;
            String path = Server.MapPath("~/UploadedImages/");
            if (FileUpload1.HasFile) 
            {
                String fileExtension = 
                    System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
                String[] allowedExtensions = 
                    {".gif", ".png", ".jpeg", ".jpg"};
              for (int i = 0; i < allowedExtensions.Length; i++)
              {
                   if (fileExtension == allowedExtensions[i])
                   {
                        fileOK = true;
                   }
              }
            }
    
            if (fileOK)
            {
                try
                {
                    FileUpload1.PostedFile.SaveAs(path 
                        + FileUpload1.FileName);
                    Label1.Text = "File uploaded!";
                }
                catch (Exception ex)
                {
                    Label1.Text = "File could not be uploaded.";
                }
            }
            else
            {
                Label1.Text = "Cannot accept files of this type.";
            }
        }
    }
    

См. также

Основные понятия

Общие сведения о серверном веб-элементе управления FileUpload