C# Firefox未下载正确显示的blob PDF
在Firefox(v.49.0.2)浏览器中尝试保存(CTRL+S)正确显示的PDF文档时,我的客户端无法下载PDF文档。 我不知道这是我的编程问题还是浏览器问题。 我可以下载的唯一方法是点击PDF插件的“下载”按钮,但我的客户希望使用(CTRL+S)选项保存文件。 请看这张照片: 还有一个角度代码,我试图在浏览器中打开一个文件:它可以在Chrome和Edge上工作,也可以在Firefox中打开PDF。响应对象是$http响应C# Firefox未下载正确显示的blob PDF,c#,angularjs,pdf,firefox,blob,C#,Angularjs,Pdf,Firefox,Blob,在Firefox(v.49.0.2)浏览器中尝试保存(CTRL+S)正确显示的PDF文档时,我的客户端无法下载PDF文档。 我不知道这是我的编程问题还是浏览器问题。 我可以下载的唯一方法是点击PDF插件的“下载”按钮,但我的客户希望使用(CTRL+S)选项保存文件。 请看这张照片: 还有一个角度代码,我试图在浏览器中打开一个文件:它可以在Chrome和Edge上工作,也可以在Firefox中打开PDF。响应对象是$http响应 function openFile(response) {
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;
请尝试更改响应对象中的内容处置标头以同时保存文件名:
Content-Disposition: attachment; filename="document.pdf"
比如:
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue( 'attachment; filename="document.pdf"' );
这可能会有帮助。不确定,但值得一试…如果您执行
CTRL+S
,会发生什么情况?它会打开“另存为”对话框,在浏览器顶栏中指示新的下载,并且在该图片上看起来像这样可能是因为url没有以.pdf
结尾?在这里,它似乎起了作用。在您的http响应对象中是否设置为pdf的mime类型?Wilt,我编辑了我的问题。我不知道如何将pdf扩展名添加到生成的blob文件url。内容类型为application/pdf,否则Firefox将不会显示在pdf查看器中。这似乎是Firefox中的一个错误,EDF网站(EDF代表法国电力公司)上也出现了这种情况:我无法使用Mozilla Firefox第一次下载pdf发票。使用另存为
功能在下载管理器中显示失败
状态。点击下载管理器中失败下载前面的重试按钮后,文件最终被正确下载。所以我猜这是Firefox本身的问题。这段代码为生成的下载文件名添加了扩展名,但仍然存在相同的错误。