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

6
我在使用安卓平板电脑(摩托罗拉Xoom)自定义asp.net网站的默认浏览器下载PDF文件时遇到了问题。由于需要从UNC路径读取文件,我使用了Response.OutputStream.Write方法来发送文件。这种方法在IE、Firefox、Safari和iPad上都能正常工作,但是在Xoom浏览器上无法正常工作。然而,当我在Xoom上下载Firefox后,就可以成功下载文件了。
我发现有几个地方建议我使用以下标头: Content-Type: application/octet-stream Content-Disposition: attachment; filename="MyFileName.PDF"
我尝试了这个方法,但没有成功。我还尝试使用application/pdf和application/force-download的Content-Type,以及各种大小写组合、双引号、单引号、无引号等形式的Content-Disposition,但仍未找到可行的解决方法。
我还发现,如果我在Page_Load中执行下载文件的代码,它可以正常下载;但是如果我进行postback,然后执行代码(点击链接按钮下载文件),它就无法正常工作。
是否有人能够在OOTB Android 3.0浏览器上使用自定义C#代码下载文件?

我遇到了类似的问题。同样的麻烦。只有在通过UNC引用下载文件时才会出现此问题。我们在将文件序列化为byte[]后使用Response.BinaryWrite。对于本地文件,它可以正常工作,但是当我们从文件代理(即UNC目录)获取byteArray时,“下载失败”突然出现了。 - theo
你能用Android模拟器下载PDF文件吗? - kaitsu
Web服务器是否发送gzip压缩的内容?尝试禁用它并查看是否有任何更改。 (有时您可能会意外地双重编码,或以稍微不同的格式进行编码,某些浏览器可以更好地处理它。) - Jon Adams
2个回答

1
这是一个关于编程问题的旧帖,但如果有人遇到类似问题可以参考以下内容:
在设置中选中“未知来源”-->“应用程序”。
确保在IIS服务器上已定义PDF MIME类型(application/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");
}

0

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

为了使其与网站的其他部分更加兼容(如果需要),您可以向下载页面传递不同的参数以下载不同的文件,或者仅在检测到网站在安卓浏览器上运行时重定向到此页面。

我很快会添加代码示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接