📜  ASP.NET-文件上传

📅  最后修改于: 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控件以及一个保存按钮和一个标签控件,用于显示文件名,文件类型和文件长度。

在设计视图中,表单如下所示:

上传文件

内容文件代码如下:

File Upload:






保存按钮后面的代码如下:

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块用于捕获错误,并显示错误消息。