C#http下载大文件(300 Mb)几分钟后停止(80 Mb后)

时间:2010-08-02 06:12:27

标签: c# http download

我使用以下代码将.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();

1 个答案:

答案 0 :(得分:1)

您可以在executionTimeout的{​​{3}}标记中设置web.config属性,以防止代码中止。

请原谅我说,但你读完文件后弄得一团糟。您创建StreamReader只是为了让它为您打开FileStream,并且您没有正确处置StreamReader。此外,您使用BinaryReader,但不使用它的任何功能,Read方法可直接从FileStream获得。因此,请跳过StreamReaderBinaryReader,然后自己创建一个FileStream