首页 新闻 会员 周边 捐助

asp.net文件批量下载

0
悬赏园豆:40 [已解决问题] 解决于 2015-04-23 12:02

Response.Clear();
Response.AddHeader("content-disposition", "filename=" + HttpContext.Current.Server.UrlEncode("批量文件" + DateTime.Now.ToString("D")) + ".zip");
using (ZipFile zip = new ZipFile(System.Text.Encoding.Default))//解决中文乱码问题
{
    if (ds.Tables[0].Rows.Count > 0)
       {
          foreach (DataRow row in ds.Tables[0].Rows)
             {
                string tempPath = row["FilePath"].ToString().Replace('\\', '/');
                string mapPath = Server.MapPath("/Download/" + tempPath);
                zip.AddFile(mapPath, "");
              }
        }
        zip.Save(Response.OutputStream);
}
Response.End();

此功能为文件批量下载,用的是第三方类库(ionic.zip.dll)对多个文件进行打包,然后把压缩包保存到输出流中进行输出。

网上搜了很多答案说:把 Response.End(), 改为  HttpContext.Current.ApplicationInstance.CompleteRequest()。但还是不行。

调试时catch中显示:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。
请各位大侠指点指点!~

RedLaugh的主页 RedLaugh | 初学一级 | 园豆:71
提问于:2013-01-15 10:19
< >
分享
最佳答案
0

将你这个方法标注这个特性试试:

using System.Runtime.CompilerServices;
[MethodImplAttribute(MethodImplOptions.NoInlining | MethodImplOptions.Synchronized)]

不行的话,试试ionic.zip.dll的其他版本!!!

收获园豆:20
滴答的雨 | 老鸟四级 |园豆:3660 | 2013-01-15 10:49

还是不行,不过还是谢谢你!~

RedLaugh | 园豆:71 (初学一级) | 2013-01-15 11:22
其他回答(1)
0

这种直接输出压缩文件流的方式,在 文件比较大或者 并发高的情况会造成 内存溢出。

收获园豆:20
geass.. | 园豆:1821 (小虾三级) | 2013-01-16 17:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册