2010-08-02 71 views
0

我使用以下代码向客户发送.zip文件,它对60-80 Mb左右的文件非常有用,但是当我尝试使用大文件(300 Mb)的客户报告说,浏览器(包括IE和FFX)在几分钟后(大约(80Mb))停止下载进度,并且没有更多事情发生。几分钟后(80 Mb后)C#http下载带有大文件(300 Mb)

我不知道是否可能有一个安装问题,使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(); 

回答

1

您可以设置在httpRuntime标签executionTimeout财产web.config从被中止保持代码。

不好意思说出来,但是你已经把阅读文件弄得一团糟。你创建一个StreamReader只是为了让你打开一个FileStream,并且你不会正确处置StreamReader。此外,您使用BinaryReader,但您不使用它的任何功能,Read方法可直接从FileStream获得。所以,跳过StreamReaderBinaryReader,只需自己创建一个FileStream

相关问题