如何将文件写入Response for Internet Explorer Mobile?

时间:2013-03-17 05:33:55

标签: c# asp.net internet-explorer windows-phone-8 windows-phone

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

      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上,它会失败。正如预期的那样,我得到一个屏幕,其中显示“点击打开”消息。

然而,当我点击该消息时,它会导航到一个空白页面,其网址为“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

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

2 个答案:

答案 0 :(得分:1)

我弄清楚造成这个问题的原因。为了进入我向客户端写文件的页面,我使用了

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

出于某种原因,这导致了Windows Phone设备上的问题。我更改了它,以便在客户端完成页面更改。这解决了这个问题。您可以使用javascript来执行此操作:

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

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

答案 1 :(得分:0)

这解决了IIS 8与.NET 4.5结合WP 8的问题:

它在调试模式下工作,但不在debug =“false”下工作。页面执行时间不超过90秒,但我必须手动设置ScriptTimeout:

Server.ScriptTimeout = 120;

或在web.config中:

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

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