文件上传(File Uploading)
优质
小牛编辑
131浏览
2023-12-01
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类还具有以下只读属性:
属性 | 描述 |
---|---|
FileBytes | 返回要上载的文件中的字节数组。 |
FileContent | 返回指向要上载的文件的流对象。 |
FileName | 返回要上载的文件的名称。 |
HasFile | 指定控件是否具有要上载的文件。 |
PostedFile | 返回对上载文件的引用。 |
发布的文件封装在HttpPostedFile类型的对象中,可以通过FileUpload类的PostedFile属性进行访问。
HttpPostedFile类具有以下常用属性:
属性 | 描述 |
---|---|
ContentLength | 以字节为单位返回上载文件的大小。 |
ContentType | 返回上载文件的MIME类型。 |
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块用于捕获错误,并显示错误消息。