ASP.NET - 文件上传

ASP.NET有两个控件允许用户将文件上传到Web服务器.一旦服务器收到发布的文件数据,应用程序就可以保存,检查或忽略它.以下控件允许文件上传:

  • HtmlInputFile  -  HTML服务器控件

  • FileUpload  - 和ASP.NET网页控制

两个控件都允许文件上传,但FileUpload控件会自动设置表单的编码,而HtmlInputFile则不会这样做.

在本教程中,我们使用FileUpload控件. FileUpload控件允许用户浏览并选择要上传的文件,提供浏览按钮和用于输入文件名的文本框.

一次,用户输入了文件名通过键入名称或浏览文本框,可以调用FileUpload控件的SaveAs方法将文件保存到磁盘.

FileUpload的基本语法是:

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

FileUpload类派生自WebControl类,并继承其所有成员.除此之外,FileUpload类具有以下只读属性:

属性描述
FileBytes返回要上传的文件中的字节数组.
FileContent返回指向要上载的文件的流对象.
FileName返回要上传的文件的名称.
HasFile指定控件是否有要上载的文件.
PostedFile返回对上传文件的引用.

发布的文件封装在HttpPostedFile类型的对象中,可以通过FileUpload类的PostedFile属性访问.

HttpPostedFile类具有以下frequ使用过的属性:

属性描述
ContentLength返回大小上传的文件以字节为单位.
ContentType返回的MIME类型上传的文件.
FileName返回完整的文件名.
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块是用于捕获错误,并显示错误消息.