从我的ASP.NET网站下载Android 3.0浏览器中的文件

问题描述:

我在Android平板电脑(Motorola Xoom)的开箱即用浏览器中从我的自定义asp.net网站下载PDF文件时出现问题。从我的ASP.NET网站下载Android 3.0浏览器中的文件

我使用Response.OutputStream.Write发送文件,因为它必须从UNC路径读取文件。此方法适用于IE,Firefox,Safari和iPad,但不适用于Xoom上的浏览器。但是,当我在Xoom上下载Firefox时,我能够很好地下载该文件。

我发现了几个提示我使用下列标题的点: Content-Type:application/octet-stream Content-Disposition:attachment; filename =“MyFileName.PDF”

我试过这个没有运气。我还尝试使用内容类型的应用程序/ pdf和应用程序/强制下载和文件名大写,扩展名大写,扩展名小写,双引号,单引号,没有引号,等等的内容处置的每个组合,并已找到有效的东西。

我还发现,如果我执行代码来下载Page_Load上的文件,它可以下载,但如果我做了回发然后执行代码(单击链接按钮下载文件),它不会不工作

有没有人能够使用OOTB Android 3.0浏览器上的自定义C#代码下载文件?

+0

我有一个类似的问题。同样的麻烦。只有在通过UNC参考下载文件时才会出现此问题。将文件序列化为byte []后,我们使用Response.BinaryWrite。它适用于本地文件,但是当我们从我们的文件代理(读取,UNC目录)中获取byteArray时,突然出现“下载失败” – theo 2011-08-09 17:28:07

+0

您是否可以使用Android模拟器下载PDF? – kaitsu 2011-08-19 02:03:21

+0

Web服务器是否发送gzip内容?尝试禁用该功能并查看是否进行了任何更改。 (有时候您可能会意外地进行双重编码,或者以稍微不同的格式进行编码,并且某些浏览器比其他浏览器处理得更好。) – 2011-09-01 17:45:58

我不知道为什么会发生这种情况,但是如果您可以在Page_Load块内下载文件,则解决方法将链接到专用页面以下载您在Page_Load块内调用下载功能的位置。

为了使这更符合您的网站的其他部分(如果需要),您可能会传递不同的参数到页面以下载不同的文件,或者只有当您检测到网站正在android浏览器上运行时才重定向到此页面。

我将很快添加代码示例。

这是旧的,但万一有人遇到这个问题:在设置

检查未知来源 - >应用程序。

确保在IIS服务器上有MIME类型(应用程序/ pdf)中定义的PDF。

此外,如果您使用的文件处理程序,您将需要设置标题信息。

此代码块是什么将在文件处理程序使用的例子:

string dirpath = System.Configuration.ConfigurationManager.AppSettings["FilePath"]; 
string file = System.Configuration.ConfigurationManager.AppSettings["FileName"]; 

System.IO.FileInfo fi = new System.IO.FileInfo(dirpath + file); 
string contentlen = fi.Length.ToString(); 

context.Response.Buffer = true; 
context.Response.Clear(); 
context.Response.AddHeader("content-disposition", "attachment; filename=" + file); 
context.Response.AddHeader("content-length", contentlen); 
context.Response.ContentType = "application/pdf"; 

try 
{ 
    context.Response.WriteFile(dirpath + file); 
} 
catch (Exception) 
{ 
    context.Response.Redirect("Error.aspx"); 
}