IE8:无法下载通过Silverlight和ASP.NET发送的文件

时间:2011-01-26 17:22:46

标签: asp.net silverlight internet-explorer-8 download

在我们的ASP.NET网站中,我们开发了一个允许用户下载文件的aspx页面。文件路径作为参数发送,然后读取文件内容并将其写入响应流。我们使用的代码如下:

string filepath = HttpContext.Current.Request.Params["FilePath"];
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filepath));
Response.TransmitFile(filepath);
Response.Flush();

在我们的开发环境中,一切都按预期工作,但是当我们在生产服务器中使用这段代码时,我们注意到在尝试下载几乎所有类型的文件时,浏览器中没有任何反应。它只是为该aspx页面打开一个新窗口,但它几乎立即关闭。这是非常奇怪的,因为我们尝试下载.pdf,.doc,.xls,.txt和图像文件没有运气,除了一些(不是全部).msg文件。

我们一直在寻找嗅到与Fiddler一起到达浏览器的HTTP流量的线索,但我们看到的并不奇怪。在所有情况下,文件内容都会发送到浏览器,没有任何差异,所以似乎浏览器没有显示打开/保存/取消对话框。

以下是浏览器中收到的包含失败文件的标头示例:

  

HTTP / 1.1 200 OK代理连接:   保持活跃的联系:保持活力   内容长度:421395 Via:1.1   IBISA01日期:2011年1月26日星期三   格林威治标准时间12:02:54内容类型:   application / octet-stream服务器:   Microsoft-IIS / 7.5缓存控制:   私人内容 - 处理:   附件;文件名= P08-0656 Interflex   EspecificaciónInterfaceSGA ERP   版本0.1.pdf X-AspNet-版本:   4.0.30319 X-Powered-By:ASP.NET

这些是可以下载的文件的标题:

  

HTTP / 1.1 200 OK代理连接:   保持活跃的联系:保持活力   内容长度:290816 Via:1.1   IBISA01日期:2011年1月26日星期三   格林威治标准时间12:03:29内容类型:   application / octet-stream服务器:   Microsoft-IIS / 7.5缓存控制:   私人内容 - 处理:   附件;文件名= Acalaracion final   Fichero ascii provedores   Interflex.msg X-AspNet-版本:   4.0.30319 X-Powered-By:ASP.NET

在所有情况下,文件的完整内容都显示在标题之后,显然没有与编码相关的问题。

我们想知道是否有可能调试或跟踪Internet Explorer活动,以了解拒绝下载文件的原因。

Web服务器具有Windows Server 2008 R2和IIS 7.5。我们使用的浏览器是基于Windows 7的IE 8.0。

非常感谢提前。

Jose Antonio Arroba

3 个答案:

答案 0 :(得分:2)

我们在pdf上遇到了类似的问题,请尝试添加此内容。

 Response.CacheControl = "no-cache";
 Response.AddHeader("Pragma", "no-cache");

修改实际上它与您的文件名有关:

How to encode UTF8 filename for HTTP headers? (Python, Django)

尝试从不起作用的示例中删除ó

答案 1 :(得分:1)

最后,我们能够在尝试下载文件时看到Internet Explorer中这种奇怪行为发生了什么。我忘了提到我们试图从Silverlight应用程序下载该文件,该应用程序调用一个aspx页面负责在其响应中写入文件内容。似乎Internet Explorer的安全引擎将此行为视为自动下载,并在从非Intranet服务器浏览时默认阻止它。

在Internet Explorer的Internet Explorer安全设置中启用“自动提示文件下载”设置解决了该问题。令我们困惑的是为什么在启用此设置之前我们能够下载一些文件。

非常感谢所有试图帮助我们的人。希望这个答案可以节省那些可以在未来体验同样优点的人的时间。

致以最诚挚的问候,

Jose Antonio Arroba

答案 2 :(得分:0)

为每个案例尝试一下......

Dim strExtension as String = ""
Dim strType as String = ""

strExtension = Path.GetExtension(filepath)

Select Case strExtension.ToUpper()

Case ".PDF"
strType = "text/pdf"
Exit Select

CASE ".DOC"
strType = "text/doc"
Exit Select

End Select

Response.Clear()
Response.ClearHeaders()
Response.Buffer = True
Response.ContentType = strType