日期:2014-05-17  浏览次数:20538 次

asp.net怎样实现批量下载文件(非打包形式下载)
我想实现的是一个一个的下载。
比如我有一个文件列表。通过checkbox选择。通过单击下载按钮下载选中文件。
百度到都是用打包形式实现批量下载。
这是我自己写的代码,但是点击下载后只能下载一个文件。单步调试,循环只执行一次。不知道是什么原因。
C# code
 string Name;
        string Path;
        protected void Button2_Click(object sender, EventArgs e)
        {
            foreach (Control control in Panel1.Controls)
            {
                try
                {
                    if (((CheckBox)control).Checked)
                    {
                      //获取选择文件的相对路径。我将文件的相对路径写在了CssClass里面
                        Path = ((CheckBox)control).CssClass;
                        string[] path = Path.Split('/');
                        Name = path[path.Length - 1];
                        download(Path, Name);
                    }
                }
                catch (Exception)
                { continue; }
            }
        }

        private void download(string Path, string Name)
        {
            //用户下载文件时保存文件使用的默认命名
            string downLoadFileName = Name;
            //设定响应类型为下载
            this.Response.ContentType = "application/x-zip-compressed";
            //获取下载文件在服务器端的物理路径
            string downLoadPath = this.Server.MapPath(Path);

            //添加响应头标示信息  this.Server.UrlPathEncode对下载文件名进行编码 防止文件名乱码
            this.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", this.Server.UrlPathEncode(downLoadFileName)));
            //下载文件输出
            this.Response.TransmitFile(downLoadPath);
            this.Response.End();
        }


具体怎样实现?是用多线程吗?求大大们指教。谢谢

------解决方案--------------------
不知道是什么原因。》?

这种方法只能下载一个文件,就是原因,一次只能输出一个文件流

你要下载多个,又不想打包下载,你只能使用 iframe


<iframe src="down.aspx?file=f1" style="display:none"></iframe>
<iframe src="down.aspx?file=f2" style="display:none"></iframe>
<iframe src="down.aspx?file=f3" style="display:none"></iframe>
<iframe src="down.aspx?file=f4" style="display:none"></iframe>





------解决方案--------------------
提供一个思路:

 可以循环调用JS方法输出文件路径并打开
------解决方案--------------------
这个问题我也研究了好长时间,一次只能输出一个文件流;最后还是打包下载了。哎