C# Firefox未下载正确显示的blob PDF

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) {

在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;

请尝试更改响应对象中的内容处置标头以同时保存文件名:

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本身的问题。这段代码为生成的下载文件名添加了扩展名,但仍然存在相同的错误。