如何将文件写入移动Internet Explorer的响应

本文关键字:Internet Explorer 响应 移动 文件 | 更新日期: 2023-09-27 18:04:32

我正在尝试将文件写入响应以供下载。我使用:

      Response.Clear();
      Response.AddHeader("content-disposition", "attachment;filename=" + name);
      Response.ContentType = GetMimeType(path);
      Response.BinaryWrite(File.ReadAllBytes(path).ToArray());
      Response.End();

这在多个桌面浏览器上运行良好。然而,在Windows Phone 8设备上的Internet Explorer Mobile 10上,它失败了。正如预期的那样,我看到一个屏幕,上面写着"点击打开"。

但是,当我点击消息时,它会导航到一个url为"Default[x].htm"的空白页面。到目前为止,x是1 2 3。如果我将页面添加到我的收藏夹,我可以看到Default[x].html的完整URL是"file://C:'Data'Users'DefApps'AppData'INTERNETEXPLORER'INetCache'WNW0K564'Default[x].htm"。

无论文件的扩展名或MIME类型是什么,这都是相同的。我不知道为什么会发生这种事。是否有另一种方法将文件写入与IE Mobile兼容的响应?

正如我所说的,无论文件扩展名或MIME类型如何,这都会失败。例如,我验证的情况是:

filename: themes.ppt, MIME Type: application/vnd.ms-powerpoint

如果直接链接,所有文件下载都很好,但出于安全原因,我不能这样做。我宁愿不创建文件的临时副本并链接到这些副本,但如果我找不到将它们写入响应的方法,我将不得不这样做。

如何将文件写入移动Internet Explorer的响应

我找到了导致这个问题的原因。为了进入我正在向客户机写入文件的页面,我使用

Response.Redirect("downloadfile.aspx?" + ...);

由于某种原因,这导致了Windows Phone设备上的问题。我更改了它,以便在客户端完成页面更改。这解决了这个问题。你可以用javascript来做这个:

location.href = "downloadfile.aspx?" + ...;

但我最终只是使用链接直接链接到我的下载页面(downloadfile.aspx)

这解决了IIS 8与。net 4.5结合使用WP 8的问题:

它在调试模式下工作,但debug="false"时不起作用。Page的执行时间不需要90秒,但是我必须手动设置ScriptTimeout:

Server.ScriptTimeout = 120;

或在web.config:

<configuration>
    <system.web>
        <compilation debug="false" targetFramework="4.5" />
    </system.web>
</configuration>

非调试模式下默认值为90秒