2014-11-05 11 views
6

Sto utilizzando FileSaver.js e Blob.js in un'applicazione Angular JS per salvare un PDF restituito da un servizio REST (che restituisce una matrice di byte che rappresentano il file).Salvataggio di un PDF restituito dal servizio

var headers = {headers: {"Authorization":"Bearer "+token, "Accept":"application/pdf"}}; 

    $http.get(URL, headers) 
    .success(function (data) { 
     var blob = new Blob([data], {type: 'application/pdf'}); 
     saveAs(blob, 'contract.pdf'); 
    }); 

il file viene salvato con il tipo corretto e il numero di pagine è corretto, ma è completamente vuoto. Aprendolo con un editor, si è scoperto che contiene solo la prima parte dei dati restituiti dal server, come se fosse troncata.

Grazie a tutti per l'aiuto!

+1

Hai risolto questo? – ronnyfm

+0

La stessa domanda qui .. ;-) Hai trovato una soluzione? Grazie. –

+0

Anche bloccato su questo. – user2085143

risposta

7

$ http.get probabilmente non gestisce correttamente i dati binari. Prova $http({method: "GET", url: URL, responseType: "arraybuffer", ...})(see angularjs) per ottenere un oggetto binario che puoi inserire per i dati.

È inoltre possibile utilizzare responseType: "blob" in modo da non dover nemmeno creare var blob, ma penso che responseType abbia meno supporto browser.

0

Aggiunta di un tipo di risposta all'argomento di configurazione ha funzionato per me. Prova:

var config = { responseType: 'blob', headers: {"Authorization":"Bearer "+token, 
"Accept":"application/pdf"}}; 

    $http.get(URL, config) 
     .success(function (data) { 
      var blob = new Blob([data], {type: 'application/pdf'}); 
      saveAs(blob, 'contract.pdf'); 
     }); 
Problemi correlati