我使用以下代码将.zip文件发送给客户,它适用于大约60-80 Mb的文件但是当我尝试使用较大的文件(300 Mb)时,客户会报告浏览器(IE和FFX)几分钟后(大约(80Mb))停止下载进度,没有其他事情发生。
我想知道是否存在IIS的设置问题,它会在几分钟后停止请求处理线程执行,或者我的代码是否有任何问题。
我显然可以找到其他方式来传递.zip文件,但这个问题让我感到烦恼,我想让它运转起来。
代码:
Response.ContentType = "application/zip";
Response.AddHeader("Content-Disposition", "attachment; filename=" + "hands.zip");
var fi = new FileInfo(dld.Path);
Response.AddHeader("Content-Length", fi.Length.ToString());
const int buffercnt = 50000;
var buffer = new byte[buffercnt];
using (var br = new BinaryReader( new StreamReader(dld.Path).BaseStream))
{
int read = br.Read(buffer, 0, buffercnt);
while(read != 0)
{
Response.OutputStream.Write(buffer, 0, read);
read = br.Read(buffer, 0, buffercnt);
Response.Flush();
}
}
Response.Close();
Response.End();
答案 0 :(得分:1)
您可以在executionTimeout
的{{3}}标记中设置web.config
属性,以防止代码中止。
请原谅我说,但你读完文件后弄得一团糟。您创建StreamReader
只是为了让它为您打开FileStream
,并且您没有正确处置StreamReader
。此外,您使用BinaryReader
,但不使用它的任何功能,Read
方法可直接从FileStream
获得。因此,请跳过StreamReader
和BinaryReader
,然后自己创建一个FileStream
。