📅  最后修改于: 2020-11-21 05:47:48             🧑  作者: Mango
ASP.NET具有两个控件,允许用户将文件上传到Web服务器。服务器收到发布的文件数据后,应用程序可以将其保存,检查或忽略。以下控件允许文件上传:
HtmlInputFile -HTML服务器控件
FileUpload-和ASP.NET Web控件
这两个控件都允许文件上传,但是FileUpload控件会自动设置表单的编码,而HtmlInputFile则不允许。
在本教程中,我们使用FileUpload控件。 FileUpload控件允许用户浏览并选择要上传的文件,并提供浏览按钮和用于输入文件名的文本框。
一旦用户通过输入名称或浏览在文本框中输入文件名,就可以调用FileUpload控件的SaveAs方法将文件保存到磁盘。
FileUpload的基本语法为:
FileUpload类派生自WebControl类,并继承其所有成员。除此之外,FileUpload类还具有以下只读属性:
Properties | Description |
---|---|
FileBytes | Returns an array of the bytes in a file to be uploaded. |
FileContent | Returns the stream object pointing to the file to be uploaded. |
FileName | Returns the name of the file to be uploaded. |
HasFile | Specifies whether the control has a file to upload. |
PostedFile | Returns a reference to the uploaded file. |
发布的文件封装在HttpPostedFile类型的对象中,可以通过FileUpload类的PostedFile属性对其进行访问。
HttpPostedFile类具有以下常用属性:
Properties | Description |
---|---|
ContentLength | Returns the size of the uploaded file in bytes. |
ContentType | Returns the MIME type of the uploaded file. |
FileName | Returns the full filename. |
InputStream | Returns a stream object pointing to the uploaded file. |
下面的示例演示FileUpload控件及其属性。该表单具有一个FileUpload控件以及一个保存按钮和一个标签控件,用于显示文件名,文件类型和文件长度。
在设计视图中,表单如下所示:
内容文件代码如下:
保存按钮后面的代码如下:
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("" + FileUpload1.FileName);
//Showing the file information
sb.AppendFormat("
Save As: {0}", FileUpload1.PostedFile.FileName);
sb.AppendFormat("
File type: {0}", FileUpload1.PostedFile.ContentType);
sb.AppendFormat("
File length: {0}", FileUpload1.PostedFile.ContentLength);
sb.AppendFormat("
File name: {0}", FileUpload1.PostedFile.FileName);
}catch (Exception ex)
{
sb.Append("
Error
");
sb.AppendFormat("Unable to save file
{0}", ex.Message);
}
}
else
{
lblmessage.Text = sb.ToString();
}
}
请注意以下几点:
StringBuilder类是从System.IO命名空间派生的,因此需要将其包括在内。
try和catch块用于捕获错误,并显示错误消息。