如何:使用 FileUpload Web 服务器控件上载文件

更新:2007 年 11 月

使用 FileUpload Web 服务器控件,您可以向用户提供一种将文件从其计算机发送到服务器的方法。要上载的文件将在回发期间作为浏览器请求的一部分提交给服务器。在文件完成上载后,您可以用代码管理该文件。

ms227669.alert_note(zh-cn,VS.90).gif说明:

可上载的最大文件大小取决于 MaxRequestLength 配置设置的值。如果用户试图上载超过最大文件大小的文件,上载就会失败。

使用 FileUpload Web 服务器控件上载文件

  1. 向页面添加 FileUpload 控件。

    ms227669.alert_note(zh-cn,VS.90).gif说明:

    出于安全方面的考虑,不能将文件名预加载到 FileUpload 控件中。

  2. 在事件(如该页的 Load 事件)的处理程序中,执行下面的操作:

    1. 通过测试 FileUpload 控件的 HasFile 属性,检查该控件是否有上载的文件。

    2. 检查该文件的文件名或 MIME 类型以确保用户已上载了您要接收的文件。若要检查 MIME 类型,请获取作为 FileUpload 控件的 PostedFile 属性公开的 HttpPostedFile 对象。然后,通过查看已发送文件的 ContentType 属性,就可以获取该文件的 MIME 类型。

      ms227669.alert_security(zh-cn,VS.90).gif安全说明:

      在某些情况下,已上载文件的 MIME 类型可能是伪造的,因此只检查文件的 MIME 类型不是一种可靠的安全检查。

    3. 将该文件保存到您指定的位置。您可以调用 HttpPostedFile 对象的 SaveAs 方法。或者,还可以使用 HttpPostedFile 对象的 InputStream 属性,以字节数组或字节流的形式管理已上载的文件。

    下面的示例演示如何使用已上载的文件。该代码根据允许的文件扩展名的硬编码列表检查已上载文件的文件扩展名,并拒绝所有其他类型的文件。然后,将该文件写入当前网站的 UploadedImages 文件夹中。用已上载文件在客户端计算机上的文件名保存该文件。由于 HttpPostedFile 对象的 FileName 属性返回该文件在客户端计算机上的完整路径,因此会使用 FileUpload 控件的 FileName 属性。

    ms227669.alert_security(zh-cn,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 Web 服务器控件概述