【发布时间】:2016-11-09 18:51:59
【问题描述】:
第一次在这里提问,如果我做错了,请告诉我......
我的 C# MVC5 应用程序允许用户下载 pdf 文件。除了在我的安卓手机上,它工作得很好。我正在使用 chrome 并让操作系统处理 PDF。看起来它正在使用 Google Drive 应用程序的内置 PDF 查看器。
当我使用指向文件的直接链接时,它可以正常工作,但是当我通过控制器操作下载它时,它会失败并显示“文件格式无效”。我已将其简化为这个问题的测试用例。
这是我的操作方法:
public ActionResult IndirectTestFile()
{
string filename = "document.pdf";
var disposition = new System.Net.Mime.ContentDisposition("inline") { FileName = filename };
Response.AppendHeader("Content-Disposition", disposition.ToString());
string serverFilename = Server.MapPath("~/files/direct/" + filename);
return File(serverFilename, "application/pdf");
}
还有我的 HTML:
//This fails:
<a href="/report/indirectTestFile">Indirect link to file</a>
//This works:
<a href="/Files/direct/Document.pdf">Direct link to file</a>
我正在使用 Windows(桌面)Chrome 来获取这些请求的标头。
这是直接链接的响应标头:
HTTP/1.1 200 OK
Content-Type: application/pdf
Last-Modified: Thu, 07 Jul 2016 11:46:47 GMT
Accept-Ranges: bytes
ETag: "b8a3dd3d45d8d11:0"
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Thu, 07 Jul 2016 12:33:05 GMT
Content-Length: 51793
以及链接到 MVC 操作的响应标头:
HTTP/1.1 200 OK
Cache-Control: private, s-maxage=0
Content-Type: application/pdf
Server: Microsoft-IIS/10.0
Content-Disposition: inline; filename=document.pdf
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Thu, 07 Jul 2016 12:34:09 GMT
Content-Length: 51793
我没有看到任何巨大的差异,但一个可靠地工作,另一个可靠地失败。
这不是一个损坏的下载。如果我在 Windows 上下载“坏”的 PDF 并将其复制到 android 手机,同样的查看器很乐意显示它!
有人看过这个吗?感谢您的帮助。
【问题讨论】:
标签: c# asp.net-mvc pdf model-view-controller download