IIS7下载文件长度(IIS7 downloading file length)

2019-10-17 13:30发布

我下面的文件下载的代码:

        FileInfo fileInfo = new FileInfo(filePath);

        context.Response.Clear();
        context.Response.ContentType = "application/octet-stream";
        context.Response.AddHeader("Content-Disposition", "attachment; filename=" + System.IO.Path.GetFileName(filePath));
        context.Response.AddHeader("Content-Length", fileInfo.Length.ToString());
        context.Response.WriteFile(filePath);
        context.Response.End();

当我在我的本地IIS6运行它,它工作正常。 Web浏览器(IE8的,火狐3.5.2测试,歌剧10)显示之前,我开始下载该文件的文件长度。

当我运行在远程IIS7这个代码,Web浏览器不显示文件长度。 文件长度未知。

为什么当这个代码IIS7下运行我没有得到文件的长度?

Answer 1:

使用提琴手检查什么实际发送。 我的猜测是你得到分块编码作为缓冲的结果被设置为false IIS7服务器上。

顺便说一句,降打电话到Response.End其相当创伤性的事情,是没有必要(为此事所以是调用清除)。

编辑

流与分块编码(这是希望在您的方案)的Content-Length头应该不存在(参见内容时,严格地说RFC2616第4.4节 )。这在我看来,IIS7需要独自去执行这个。 其实我有一个经典-ASP方案,其中当IIS7 COM代码试图添加一个Content-Length头时缓冲被关闭抛出一个错误。

这实在是烦人,因为尽管在象牙塔委员会想什么,这头给最终用户的信息的一个非常有用的一块。



Answer 2:

感谢这个帖子....我得到了它的IE浏览器正在与第一线。

public void WriteCSV(string strData) {
   //Required for IIs7 WS2008R2 fix
   Response.ClearHeaders();
   Response.Clear();


   Response.Buffer = true; 
   Response.ContentType = "application/csv";
   Response.AddHeader("Content-Disposition", "attachment;filename=report.csv");
   Response.Write(strData);
   Response.Flush();
   Response.End();
}


文章来源: IIS7 downloading file length