2013-03-17 20 views
3

我正在尝试写一个文件到响应下载。我用:如何将文件写入Internet Explorer Mobile的响应?

 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“默认[X]热媒”空白页。到目前为止,“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 

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

+0

有多大文件,有什么IIS版本是你使用和你在调试模式? – user2154065 2013-03-17 06:20:00

+0

这些文件的大小从0.1MB到5MB不等。我正在使用IIS 7,并且我不处于调试模式。 – msbg 2013-03-17 06:23:26

回答

1

我想通了什么导致这个问题。为了让在其中我写的文件给客户端的页面,我用

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

出于某种原因,这是导致在Windows Phone设备的问题。我改变它,以便页面更改在客户端完成。这解决了这个问题。你也许可以使用JavaScript来做到这一点:

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

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

+0

任何人有任何想法,为什么我的解决方案修复它? – msbg 2013-03-22 21:14:56

0

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

它的工作在调试模式,但不能与调试=“假”。该页面没有采取90秒的执行,但我不得不手动设置ScriptTimeout:

Server.ScriptTimeout = 120; 

或在web.config:

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

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

+0

不幸的是,这似乎并不适合我。我会升级到IIS 8和.NET 4.5,但我没有专用服务器,我的托管提供商GoDaddy没有提供IIS 8或.NET 4.5。 – msbg 2013-03-17 16:17:14