ASP.NET 实现多文件上传

说明

以前的Web程序应用中,要实现多文件上传是很麻烦的事,但这一操作在Web应用程序中会经常用到,可以说是必不可少的,因此令开发人员非常头痛。现在有了ASP.NET,多文件上传也就不再困难了。本实例实现了多文件上传的功能,不仅可以动态添加上传控件,上传的文件数量也不受任何限制。如图1所示,单击“添加文件”按钮,上传控件会随着单击次数而不断地增加,用户在每个上传控件中选择了要上传的文件后,单击“上传文件”按钮即可实现多文件上传操作。

 关键技术

本实例首先通过System.Collections命名空间的ArrayList类存储生成的临时控件,然后应用FileUpload类中的SaveAs方法将文件保存到服务器指定路径中。

 设计过程

(1)新建一个网站,将其命名为MultiFileUpload,默认主页为Default.aspx.。

(2)在该页中添加1个Table表格、1个FileUpload控件、2个Button控件和1个Label控件,分别用于页面布局、选择上传文件、执行上传操作、添加上传控件和执行状态提示。

(3)设置首次打开页面时调用SFUPC( )方法,每执行一次就向缓存中添加一个FileUpload控件,代码如下:

protected void Page_Load(object sender, EventArgs e)

{

    if (!Page.IsPostBack)//首次执行页面

    {

        SFUPC( );

    }

}

触发“上传文件”按钮的Click事件,在该事件中调用UpFile( )方法执行文件上传操作,代码如下:

protected void Button1_Click(object sender, EventArgs e)

{

    UpFile( );    //执行上传文件

}

触发“添加文件”按钮的Click事件,在该事件中调用InsertC( )方法执行添加上传控件的操作,代码如下:

protected void Button2_Click(object sender, EventArgs e)

{

    InsertC( );//执行添加控件方法

}

定义一个方法SFUPC( ),该方法用于保存当前页面上传文件控件集到缓存中,代码如下:

private void SFUPC( )

{

    ArrayList AL = new ArrayList( );         //创建动态增加数组

    foreach (Control C in F.Controls)

    {

      if (C.GetType( ).ToString( ) == "System.Web.UI.HtmlControls.HtmlTableRow")

      {

         HtmlTableCell HTC = (HtmlTableCell)C.Controls[0];

         foreach (Control FUC in HTC.Controls)

         {

            if (FUC.GetType( ).ToString( ) == "System.Web.UI.WebControls.FileUpload")

            {

               FileUpload FU = (FileUpload)FUC;

               AL.Add(FU);

             }

          }

       }

    }

    Session.Add("FilesControls", AL);

}

定义一个方法InsertC( ),该方法用于添加一个上传文件的控件,代码如下:

private void InsertC( )           //该方法用于添加一个上传文件的控件

{

    ArrayList AL = new ArrayList( );

    this.F.Rows.Clear( );

    GetInfo( );

    HtmlTableRow HTR = new HtmlTableRow( );

    HtmlTableCell HTC = new HtmlTableCell( );

    HTC.Controls.Add(new FileUpload( ));

    HTR.Controls.Add(HTC);

    F.Rows.Add(HTR);

    SFUPC( );

}

定义一个方法GetInfo( ),该方法用于读取缓存中存储的上传文件控件集,代码如下:

private void GetInfo( )          //该方法用于读取缓存中存储的上传文件控件集

{

    ArrayList AL = new ArrayList( );

    if (Session["FilesControls"] != null)

    {

        AL = (System.Collections.ArrayList)Session["FilesControls"];

        for (int i = 0; i < AL.Count; i++)

        {

            HtmlTableRow HTR = new HtmlTableRow( );

            HtmlTableCell HTC = new HtmlTableCell( );

            HTC.Controls.Add((System.Web.UI.WebControls.FileUpload)AL[i]);

            HTR.Controls.Add(HTC);

            F.Rows.Add(HTR);

        }

    }

}

定义一个方法UpFile( ),该方法用于执行文件上传操作,代码如下:

private void UpFile( )            //该方法用于执行文件上传操作

{

    string FilePath = Server.MapPath("./") + "File";

    HttpFileCollection HFC = Request.Files;

    for (int i = 0; i < HFC.Count; i++)

    {

        HttpPostedFile UserHPF = HFC[i];

        try

        {

            if (UserHPF.ContentLength >= 0)

            {

                UserHPF.SaveAs(FilePath + "\\" + System.IO.Path.GetFileName(UserHPF.FileName));

            }

        }

        catch

        {

            Label1.Text = "处理出错!";

        }

    }

    if (Session["FilesControls"] != null)

    {

        Session.Remove("FilesControls");

    }

    Label1.Text = "上传成功!";

}

注意:使用JQuery的uploadify插件能够实现带进度提示的多文件上传功能。jQuery是一个优秀的Javascrīpt框架,uploadify插件是一个基于Flash技术的文件上传jQuery插件。提供的功能包括:能够一次性选择多个文件上传,查看上传进度,控制文件上传类型和大小,为每一步操作添加回调函数等。在ASP.NET中可以使用“一般处理程序(ashx)”文件作为服务器端处理上传的文件。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code_徐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值