ASP.NET文件上传

ASP.NET有两个控件,允许用户将文件上传到Web服务器。当服务器收到用户提交的文件数据,应用程序就可以保存,检查或忽略它。 以下控件允许上传文件:

  • HtmlInputFile - HTML服务器控件
  • FileUpload - ASP.NET网页控件

两个控件都允许文件上传,但是FileUpload控件会自动设置表单的编码,而HtmlInputFile则不会。

在本教程中,我们演示如何使用FileUpload控件。 FileUpload控件允许用户浏览并选择要上传的文件,提供浏览按钮和用于输入文件名的文本框。

当用户通过输入名称或浏览在文本框中输入文件名,就可以调用FileUpload控件的SaveAs方法来将文件保存到磁盘。

FileUpload的基本语法是:

<asp:FileUpload ID= "Uploader" runat = "server" />

FileUpload类从WebControl类派生,并继承其所有成员。除此之外,FileUpload类具有以下只读属性:

编号 属性 描述
1 FileBytes 返回要上传的文件中的字节数组。
2 FileContent 返回指向要上传的文件的流对象。
3 FileName 返回要上传的文件的名称。
4 HasFile 指定控件是否有要上传的文件。
5 PostedFile 返回对上传文件的引用。

要上传的文件封装在HttpPostedFile类型的对象中,可以通过FileUpload类的PostedFile属性访问。

HttpPostedFile类具有以下常用属性:

编号 属性 描述
1 ContentLength 以字节为单位返回上传文件的大小。
2 ContentType 返回上传文件的MIME类型。
3 FileName 返回完整的文件名。
4 InputStream 返回指向上传文件的流对象。

示例

以下示例演示了FileUpload控件及其属性。窗体有一个FileUpload控件以及一个保存按钮和一个用于显示文件名,文件类型和文件长度的标签控件。

打开Visual Studio ,创建一个空的网站项目:FileUploading ,如下 -

然后,在项目名称上点击右键选择:添加->添加新项 ,填写文件名称为:Default.aspx , 如下图所示 -

在设计视图中,窗体如下所示:

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命名空间派生的,所以需要包含它。
  • trycatch块用于捕获错误,并显示错误消息。

执行上面项目,得到以下结果 -

选择一个要上传的文件,然后提交上传 -


上一篇: ASP.NET数据库访问(Access) 下一篇: ASP.NET AdRotator控件