资源交流吧:VIP  | 网站首页 | 文章中心 | 下载中心 | 图片中心 | 雁过留声 | 音乐无限 | 互动书吧 | BT下载 | 留学频道 |  {$Wap}
您现在的位置: 九佰度在线 九佰度空间 >> 文章中心 >> 黑客前沿 >> 黑客编程 >> 文章正文 用户登录 新用户注册
在ASP.NET 2.0 中实现文件上载(图)         ★★★★ 【字体:


在ASP.NET 2.0 中实现文件上载(图)

作者:未知    文章来源:来自网络    点击数:    更新时间:2006-6-7


图 4. 使用验证控件验证文件类型

  对于上载到服务器的文件,使用 Validation 控件不是一个对其进行控制的有效方法。更改一个文件的文件扩展名并不太困难,因此扩展名将被接受并上载到服务器,从而可以避开这个简单的安全模型。

  增加服务器端文件类型验证

  您刚才看到一种将一些 ASP.NET 验证服务器控件添加到 ASP.NET 页,以便在客户端对文件扩展名进行验证(以文本方式)的简单方法。现在,让我们看看如何在服务器端执行类似的操作。如清单 4 所示。

  清单 4. 检查服务器上的文件类型


  Visual Basic
    Protected Sub Button1_Click(ByVal sender As Object, _ 
      ByVal e As System.EventArgs) 
        If FileUpload1.HasFile Then 
            Dim fileExt As String 
            fileExt = System.IO.Path.GetExtension(FileUpload1.FileName) 
            If (fileExt = ".mp3") Then 
                Try 
                    FileUpload1.SaveAs("C:\Uploads\" & _ 
                       FileUpload1.FileName) 
                    Label1.Text = "File name: " & _ 
                      FileUpload1.PostedFile.FileName & "" & _ 
                      "File Size: " & _ 
                      FileUpload1.PostedFile.ContentLength & " kb" & _ 
                      "Content type: " & _ 
                      FileUpload1.PostedFile.ContentType 
                Catch ex As Exception 
                    Label1.Text = "ERROR: " & ex.Message.ToString() 
                End Try 
            Else 
                Label1.Text = "Only .mp3 files allowed!" 
            End If 
        Else 
            Label1.Text = "You have not specified a file." 
        End If 
    End Sub 
  C#
    protected void Button1_Click(object sender, EventArgs e) 
    { 
        if (FileUpload1.HasFile) 
        { 
            string fileExt =  
               System.IO.Path.GetExtension(FileUpload1.FileName); 
            if (fileExt == ".mp3") 
            { 
                try 
                { 
                    FileUpload1.SaveAs("C:\\Uploads\\" +  
                       FileUpload1.FileName); 
                    Label1.Text = "File name: " + 
                        FileUpload1.PostedFile.FileName + "" + 
                        FileUpload1.PostedFile.ContentLength + " kb" + 
                        "Content type: " + 
                        FileUpload1.PostedFile.ContentType; 
                } 
                catch (Exception ex) 
                { 
                    Label1.Text = "ERROR: " + ex.Message.ToString(); 
                } 
            } 
            else 
            { 
                Label1.Text = "Only .mp3 files allowed!"; 
            } 
        } 
        else 
        { 
            Label1.Text = "You have not specified a file."; 
        } 
    }


  现在,通过在 System.IO.Path 命名空间中使用 GetExtension 方法,基本可以执行相同的操作。对于最终用户而言,只需将文件扩展名更改为可以生效的名称并将更改的文件上载到宿主服务器的功能不会有所影响,注意到这一点非常重要。

  同时上载多个文件

  目前为止,已经有几个不错的示例说明了如何不费周折地将文件上载到服务器。现在,让我们看看如何从一个页面将多个文件上载到服务器。

  Microsoft .NET Framework 中没有任何内置功能使您可以从一个 ASP.NET 页上载多个文件。然而,只需要少量工作,您就可以像过去使用 .NET 1.x 那样完成此任务。

  方法是将 System.IO 类导入到 ASP.NET 页中,然后使用 HttpFileCollection 类捕获通过 Request 对象发送来的所有文件。该方法使您可以从一个页面上载所需数量的文件。

  如果需要,您完全可以分别处理该页上的每个 FileUpload 控件,如清单 5 所示。

  清单 5. 分别处理每个 FileUpload 控件

Visual Basic

If FileUpload1.HasFile Then 
   ' Handle file 
End If 
If FileUpload2.HasFile Then 
   ' Handle file 
End If 

C#
if (FileUpload1.HasFile) { 
   // Handle file 
} 
if (FileUpload2.HasFile) { 
   // Handle file 
}

  该方法有效,但可能存在这种情况:您要使用 HttpFileCollection 类处理文件,特别是在处理动态生成的服务器控件列表时。

  针对这种情况的示例,您可以生成一个 ASP.NET 页,该页有三个 FileUpload 控件和一个 Submit 按钮(使用 Button 控件)。用户单击 Submit 按钮并且文件被发布到服务器之后,隐藏的代码将文件保存到服务器上的特定位置。保存文件后,在 ASP.NET 页上显示已发布的文件信息(请参见清单 6)。

  清单 6. 将多个文件上载到服务器


Visual Basic
Protected Sub Button1_Click(ByVal sender As Object, _ 
   ByVal e As System.EventArgs) 
   Dim filepath As String = "C:\Uploads" 
   Dim uploadedFiles As HttpFileCollection = Request.Files 
   Dim i As Integer = 0 
   Do Until i = uploadedFiles.Count 
     Dim userPostedFile As HttpPostedFile = uploadedFiles(i) 
     Try 
        If (userPostedFile.ContentLength > 0) Then 
           Label1.Text += "File #" & (i + 1) & "" 
           Label1.Text += "File Content Type: " & _ 
              userPostedFile.ContentType & "" 
           Label1.Text += "File Size: " & _ 
              userPostedFile.ContentLength & "kb" 
           Label1.Text += "File Name: " & _ 
              userPostedFile.FileName & "" 
           userPostedFile.SaveAs(filepath & "\" & _ 
              System.IO.Path.GetFileName(userPostedFile.FileName)) 
           Label1.Text += "Location where saved: " & _ 
              filepath & "\" & _ 
              System.IO.Path.GetFileName(userPostedFile.FileName) & _ 
              " 
" 
        End If 
     Catch ex As Exception 
        Label1.Text += "Error:" & ex.Message 
     End Try 
     i += 1 
   Loop 
End Sub 
C#
protected void Button1_Click(object sender, EventArgs e) 
{ 
   string filepath = "C:\\Uploads"; 
   HttpFileCollection uploadedFiles = Request.Files; 
   for (int i = 0; i < uploadedFiles.Count; i++) 
   {     
      HttpPostedFile userPostedFile = uploadedFiles[i]; 
      try 
      {     
         if (userPostedFile.ContentLength > 0 ) 
         { 
            Label1.Text += "File #" + (i+1) +  
               ""; 
            Label1.Text += "File Content Type: " +  
               userPostedFile.ContentType + ""; 
            Label1.Text += "File Size: " +  
               userPostedFile.ContentLength + "kb"; 
            Label1.Text += "File Name: " +  
               userPostedFile.FileName + ""; 
            userPostedFile.SaveAs(filepath + "\\" +  
               System.IO.Path.GetFileName(userPostedFile.FileName)); 
            Label1.Text += "Location where saved: " +  
               filepath + "\\" +  
               System.IO.Path.GetFileName(userPostedFile.FileName) +  
               " 
"; 
         }     
      }  
      catch (Exception Ex) 
      {     
         Label1.Text += "Error: " + Ex.Message;     
      }     
   }     
} 

  最终用户最多可以选择四个文件,然后单击 Upload Files 按钮,该按钮会初始化 Button1_Click 事件。使用 HttpFileCollection 类和 Request.Files 属性使您可以控制从该页上载的所有文件。当这些文件处于此状态时,您可以对它们进行任何操作。在本例中,检查文件的属性并将它们输出到屏幕上。最后,这些文件保存到服务器根目录的 Uploads 文件夹中。该操作的结果如图 5 所示。


图 5. 一次将一个 ASP.NET 页上的四个文件上载到服务器


  您可能已经注意到,该示例有趣的一点是,文件输入文本框的状态没有通过回发进行保存。在图 5 中您可以看到这一点。在 ASP.NET 中,无法保存文件输入文本框的状态,因为这么做可能会引发安全风险。

  小结

  ASP.NET 提供的 FileUpload 服务器控件是一个强大的控件,在 Active Server Pages 3.0 时代实现该控件非常困难。这个新增的功能允许最终用户将一个或多个文件上载到服务器。请记住,通过利用 web.config.comments 或 web.config 文件中的设置,您可以控制文件的大小。

上一页  [1] [2] 

文章录入:qq007    责任编辑:qq007 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     本类热门文章
    普通文章泰航空姐在曼谷新国际机场屡11-22
    普通文章俄罗斯最后一颗军事间谍卫星11-22
    普通文章英国成为欧洲最大性奴交易市11-22
    普通文章朝鲜称将坚决报复日本对其实11-22
    普通文章中情局被指谋杀肯尼迪兄弟 11-22
    普通文章布什访问印尼引起大规模抗议11-22
    普通文章东南亚许多儿童成为卖淫活动11-22
    普通文章英国妇女两次怀上三胞胎医学11-22
     最新推荐文章
    普通文章泰航空姐在曼谷新国际机场屡11-22
    普通文章俄罗斯最后一颗军事间谍卫星11-22
    普通文章英国成为欧洲最大性奴交易市11-22
    普通文章朝鲜称将坚决报复日本对其实11-22
    普通文章中情局被指谋杀肯尼迪兄弟 11-22
    普通文章布什访问印尼引起大规模抗议11-22
    普通文章东南亚许多儿童成为卖淫活动11-22
    普通文章英国妇女两次怀上三胞胎医学11-22
     最新文章
    普通文章泰航空姐在曼谷新国际机场屡11-22
    普通文章俄罗斯最后一颗军事间谍卫星11-22
    普通文章英国成为欧洲最大性奴交易市11-22
    普通文章朝鲜称将坚决报复日本对其实11-22
    普通文章中情局被指谋杀肯尼迪兄弟 11-22
    普通文章布什访问印尼引起大规模抗议11-22
    普通文章东南亚许多儿童成为卖淫活动11-22
    普通文章英国妇女两次怀上三胞胎医学11-22
     文章评论(评论内容只代表网友观点,与本站立场无关!发表评论
    007在线工作室 版权所有 未经许可 严禁复制本站页面以及盗取资源链接
    Copyright© 2005-2006 使用800*600像素访问本站将达到最佳效果 苏ICP备05042773号