2016-11-15 7 views
2

Мои клиенты не могут загрузить PDF-документ при попытке сохранить (CTRL + S) правильно отображаемый документ PDF в браузере Firefox (версия 49.0.2). Я не знаю, является ли это моей проблемой программирования или проблемой браузера. Единственный способ, которым я могу скачать, - это нажать кнопку «Загрузить» в плагине PDF, но мои клиенты хотят сохранить файл с параметром (CTRL + S). Пожалуйста, обратите внимание на эту картину: enter image description hereFirefox не загружает правильно отображаемый 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; 
+0

Что произойдет, если вы сделаете 'CTRL + S'? – Wilt

+0

Он открывает диалоговое окно «Сохранить как», указывает на новую загрузку в верхней панели браузеров, и это похоже на это изображение. – vpetrovic

+0

Возможно, это связано с тем, что 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

ответ

0

Попробуйте один раз, чтобы изменить заголовок распоряжения контента в вашем объекте ответа держать также имя файла:

Content-Disposition: attachment; filename="document.pdf" 

Так что-то подобный:

response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue('attachment; filename="document.pdf"'); 

Это может помочь. Не уверен, но стоит попробовать ...

+0

Этот код добавляет расширение к сгенерированному имени файла загрузки, но все еще существует та же ошибка. – vpetrovic