Мои клиенты не могут загрузить PDF-документ при попытке сохранить (CTRL + S) правильно отображаемый документ PDF в браузере Firefox (версия 49.0.2). Я не знаю, является ли это моей проблемой программирования или проблемой браузера. Единственный способ, которым я могу скачать, - это нажать кнопку «Загрузить» в плагине PDF, но мои клиенты хотят сохранить файл с параметром (CTRL + S). Пожалуйста, обратите внимание на эту картину: Firefox не загружает правильно отображаемый blob PDF
И есть угловой код, где я пытаюсь открыть файл в браузере: он работает на Chrome и Edge, он также открывает PDF в Firefox. Объект ответа - ответ 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'? – Wilt
Он открывает диалоговое окно «Сохранить как», указывает на новую загрузку в верхней панели браузеров, и это похоже на это изображение. – vpetrovic
Возможно, это связано с тем, что URL-адрес не заканчивается на '.pdf'? Здесь, с [this pdf] (http://www.pdf995.com/samples/pdf.pdf), это работает. Является ли [заголовок Content-type] (https://www.w3.org/Protocols/rfc1341/4_Content-Type.html) в вашем объекте ответа HTTP, установленном в mime-type for pdf? – Wilt