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)对多个文件进行打包,然后把压缩包保存到输出流中进行输出。
将你这个方法标注这个特性试试:
using System.Runtime.CompilerServices; [MethodImplAttribute(MethodImplOptions.NoInlining | MethodImplOptions.Synchronized)]
不行的话,试试ionic.zip.dll的其他版本!!!
还是不行,不过还是谢谢你!~
这种直接输出压缩文件流的方式,在 文件比较大或者 并发高的情况会造成 内存溢出。
网上搜了很多答案说:把 Response.End(), 改为 HttpContext.Current.ApplicationInstance.CompleteRequest()。但还是不行。
调试时catch中显示:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。
请各位大侠指点指点!~