ASP.NET有兩個控件,允許用戶將文件上傳到Web服務(wù)器。當(dāng)服務(wù)器收到用戶提交的文件數(shù)據(jù),應(yīng)用程序就可以保存,檢查或忽略它。 以下控件允許上傳文件:
兩個控件都允許文件上傳,但是FileUpload
控件會自動設(shè)置表單的編碼,而HtmlInputFile
則不會。
在本教程中,我們演示如何使用FileUpload
控件。 FileUpload
控件允許用戶瀏覽并選擇要上傳的文件,提供瀏覽按鈕和用于輸入文件名的文本框。
當(dāng)用戶通過輸入名稱或瀏覽在文本框中輸入文件名,就可以調(diào)用FileUpload
控件的SaveAs
方法來將文件保存到磁盤。
FileUpload
的基本語法是:
<asp:FileUpload ID= "Uploader" runat = "server" />
FileUpload
類從WebControl
類派生,并繼承其所有成員。除此之外,FileUpload
類具有以下只讀屬性:
編號 | 屬性 | 描述 |
---|---|---|
1 | FileBytes |
返回要上傳的文件中的字節(jié)數(shù)組。 |
2 | FileContent |
返回指向要上傳的文件的流對象。 |
3 | FileName |
返回要上傳的文件的名稱。 |
4 | HasFile |
指定控件是否有要上傳的文件。 |
5 | PostedFile |
返回對上傳文件的引用。 |
要上傳的文件封裝在HttpPostedFile
類型的對象中,可以通過FileUpload
類的PostedFile
屬性訪問。
HttpPostedFile
類具有以下常用屬性:
編號 | 屬性 | 描述 |
---|---|---|
1 | ContentLength |
以字節(jié)為單位返回上傳文件的大小。 |
2 | ContentType |
返回上傳文件的MIME類型。 |
3 | FileName |
返回完整的文件名。 |
4 | InputStream |
返回指向上傳文件的流對象。 |
以下示例演示了FileUpload
控件及其屬性。窗體有一個FileUpload
控件以及一個保存按鈕和一個用于顯示文件名,文件類型和文件長度的標簽控件。
打開Visual Studio ,創(chuàng)建一個空的網(wǎng)站項目:FileUploading ,如下 -
然后,在項目名稱上點擊右鍵選擇:添加->添加新項 ,填寫文件名稱為:Default.aspx , 如下圖所示 -
在設(shè)計視圖中,窗體如下所示:
Default.aspx 文件中的代碼如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>文件上傳示例</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h3> 文件上傳:</h3>
<br />
<asp:FileUpload ID="FileUpload1" runat="server" />
<br />
<asp:Button ID="btnsave" runat="server" onclick="btnsave_Click" Text="上傳保存" style="width:85px" />
<br /><br />
<asp:Label ID="lblmessage" runat="server" />
</div>
</form>
</body>
</html>
保存按鈕后端的代碼(Default.aspx.cs )如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnsave_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder("Empty File");
string fn = System.IO.Path.GetFileName(FileUpload1.PostedFile.FileName);
string SaveLocation = Server.MapPath("upload") + "\\" + fn;
lblmessage.Text = SaveLocation;
if ((FileUpload1.PostedFile != null) && (FileUpload1.PostedFile.ContentLength > 0))
{
try
{
sb.AppendFormat(" 正在上傳文件: {0}", FileUpload1.FileName);
//saving the file
//FileUpload1.SaveAs("F:\\worksp\\asp.net\\FileUploading\\" + FileUpload1.FileName);
FileUpload1.PostedFile.SaveAs(SaveLocation);
//Showing the file information
sb.AppendFormat("<br/> 保存為: {0}", FileUpload1.PostedFile.FileName);
sb.AppendFormat("<br/> 文件類型: {0}", FileUpload1.PostedFile.ContentType);
sb.AppendFormat("<br/> 文件長度: {0}", FileUpload1.PostedFile.ContentLength);
sb.AppendFormat("<br/> 文件名稱: {0}", FileUpload1.PostedFile.FileName);
}catch (Exception ex)
{
sb.Append("<br/> 錯誤 <br/>");
sb.AppendFormat("Unable to save file <br/> {0}", ex.Message);
}
}
lblmessage.Text = sb.ToString();
}
}
請注意以下幾點:
StringBuilder
類是從System.IO
命名空間派生的,所以需要包含它。try
和catch
塊用于捕獲錯誤,并顯示錯誤消息。執(zhí)行上面項目,得到以下結(jié)果 -
選擇一個要上傳的文件,然后提交上傳 -