Asp.net 简明教程
ASP.NET - File Uploading
ASP.NET 有两个控件允许用户将文件上传到 Web 服务器。一旦服务器接收到已发布的文件数据,应用程序可以保存它、检查它或忽略它。以下控件允许上传文件:
-
HtmlInputFile - HTML 服务器控件
-
FileUpload - 和 ASP.NET Web 控件
两个控件都允许上传文件,但 FileUpload 控件会自动设置表单的编码,而 HtmlInputFile 控件不会。
在本教程中,我们使用 FileUpload 控件。FileUpload 控件允许用户浏览并选择要上传的文件,它提供了一个浏览按钮和一个文本框,用于输入文件名。
一旦用户通过键入名称或浏览在文本框中输入了文件名,就可以调用 FileUpload 控件的 SaveAs 方法来将文件保存到磁盘中。
FileUpload 的基本语法如下:
<asp:FileUpload ID= "Uploader" runat = "server" />
FileUpload 类派生自 WebControl 类,并继承其所有成员。除此之外,FileUpload 类有以下只读属性:
Properties |
Description |
FileBytes |
返回要上传的文件中的字节数组。 |
FileContent |
返回指向要上传的文件的流对象。 |
FileName |
返回要上传的文件名。 |
HasFile |
指定控件是否具有要上传的文件。 |
PostedFile |
返回对已上传文件的引用。 |
过期的文件封装在 HttpPostedFile 类型的对象中,可以通过 FileUpload 类的 PostedFile 属性对其进行访问。
HttpPostedFile 类有以下常用属性:
Properties |
Description |
ContentLength |
返回已上传文件的大小(以字节为单位)。 |
ContentType |
返回已上传文件的 MIME 类型。 |
FileName |
Returns the full filename. |
InputStream |
返回指向已上传文件的流对象。 |
Example
以下示例演示了 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 块用于捕获错误,并显示错误消息。