【发布时间】:2017-03-29 11:07:49
【问题描述】:
尝试在 Firefox (v. 49.0.2) 浏览器中保存 (CTRL+S) 正确显示的 PDF 文档时,我的客户无法下载 PDF 文档。 我不知道这是我的编程问题还是浏览器问题。 我可以下载的唯一方法是单击 PDF 插件的“下载”按钮,但我的客户希望使用 (CTRL+S) 选项保存文件。 请看这张照片:
还有一个角度代码,我尝试在浏览器中打开文件:它适用于 Chrome 和 Edge,它还可以在 Firefox 中打开 PDF。响应对象是一个 $http 响应。
function openFile(response) {
var responseHeaders = response.headers();
var contentType = responseHeaders['content-type'];
var contentDisposition = responseHeaders['content-disposition'];
var fileName = contentDisposition.match(/filename="(.+)"/)[1];
fileName = fileName.substring(0, fileName.indexOf(';')-1);
var file = new Blob([response.data], { type: contentType });
if(contentType==='application/pdf') //YES content-type is PDF
{
try
{
var fileURL = URL.createObjectURL(file);
window.open(fileURL);
}
catch(err) //For Edge, just save a file
{
FileSaver.saveAs(file, fileName);
}
}
else //for other content types, just save a file
{
FileSaver.saveAs(file, fileName);
}
}
这是我的 C# 后端代码:
byte[] report = service.GetReportCustomerCreditRatesCard();//render report
RenderFormatResolver renderResolver = new RenderFormatResolver(request.renderFormat);
HttpContent content = new ByteArrayContent(report);
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = content;
response.Content.Headers.ContentType = new MediaTypeHeaderValue(renderResolver.MIMEType);
response.Content.Headers.ContentLength = report.Length;
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") //"attachment", "inline"
{
FileName = String.Format("{0}." + renderResolver.FileNameExtension,
Translations.REPORT_FILENAME_CUSTOMER_CARD),
Name = Translations.REPORT_FILENAME_CUSTOMER_CARD
};
return response;
【问题讨论】:
-
如果你这样做
CTRL+S会发生什么? -
它打开另存为对话框,在浏览器顶部栏中表示新下载,它看起来像这张图片
-
可能是因为url不是以
.pdf结尾的?在这里this pdf 似乎有效。您的 http 响应对象中的 theContent-typeheader 是否设置为 pdf 的 mime 类型? -
威尔特,我编辑了我的问题。我不知道如何将 pdf 扩展名添加到生成的 blob 文件 url。内容类型为 application/pdf,否则 Firefox 将不会显示在 PDF 查看器中。
-
这似乎是 Firefox 中的一个错误,因为它也发生在 EDF 网站上(EDF 代表法国电力公司):我无法在第一次使用 Mozilla Firefox 时下载 PDF 发票.使用
Save as功能在下载管理器中显示Failed状态。在下载管理器中点击失败下载前面的重试按钮后,文件终于正确下载了。所以我猜这是 Firefox 本身的问题。
标签: c# angularjs pdf firefox blob