从我的 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 浏览器中下载文件的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 ASP.NET MVC 站点中的此 AJAX 请求会触发预检检查?
从我的自定义中间件返回到角度时,asp .net core api cors 问题