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

Posted

技术标签:

【中文标题】从我的 ASP.NET 站点在 Android 3.0 浏览器中下载文件【英文标题】:Downloading files in an Android 3.0 browser from my ASP.NET site 【发布时间】:2011-08-19 12:38:08 【问题描述】:

我在 android 平板电脑(摩托罗拉 Xoom)上的开箱即用浏览器中从我的自定义 asp.net 站点下载 PDF 文件时遇到问题。

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

我发现了一些建议我使用以下标题的地方: 内容类型:应用程序/八位字节流 内容处置:附件;文件名="我的文件名.PDF"

我试过这个没有运气。我还尝试使用 application/pdf 和 application/force-download 的 Content-Types 以及文件名大写、扩展名大写、扩展名小写、双引号、单引号、无引号等的每个组合......找到任何有用的东西。

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

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

【问题讨论】:

我遇到了类似的问题。同样的麻烦。仅当我通过 UNC 参考下载文件时才会出现此问题。我们在将文件序列化为 byte[] 之后使用 Response.BinaryWrite。它适用于本地文件,但是当我们从文件代理(读取,UNC 目录)获取 byteArray 时,突然“下载失败” 你能用安卓模拟器下载PDF吗? Web 服务器是否发送 gzip 压缩的内容?尝试禁用它并查看它是否有任何更改。 (有时您可能会意外地进行双重编码,或以稍微不同的格式进行编码,而某些浏览器比其他浏览器处理得更好。) 【参考方案1】:

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

在设置 --> 应用程序下检查未知来源。

确保您在 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");

【讨论】:

【参考方案2】:

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

为了使这更符合您网站的其余部分(如果需要),您可以将不同的参数传递给页面以下载不同的文件,或者仅当您检测到该网站在 Android 浏览器上运行时才重定向到该页面。

我将很快添加代码示例。

【讨论】:

以上是关于从我的 ASP.NET 站点在 Android 3.0 浏览器中下载文件的主要内容,如果未能解决你的问题,请参考以下文章

无法启动IIS默认站点(版本7)

Azure ASP .net WebApp 请求超时

为啥我的 ASP.NET MVC 站点中的此 AJAX 请求会触发预检检查?

从我的自定义中间件返回到角度时,asp .net core api cors 问题

如何使用 url 重写将位置数据存储在我的 asp.net 站点上所有页面的 url 中?

样式不适用于 ASP.NET MVC 站点