2015-04-24 21 views
7

Ho un app JavaScript e un'API che crea un file di Excel e restituisce un array di byte con le seguenti intestazioni:Scaricare il file Excel da server e risparmiare sui client

Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 
Content-Disposition:attachment; filename=List.xlsx 

Quando vado la risorsa URL API di Excel Mi viene richiesto di scaricare il file di Excel. Se lo faccio, si scarica e si apre in Excel. Va tutto bene.

Ora per il problema:

Quello che non voglio è di esporre l'URL API nella finestra del browser dell'utente, quindi il mio obiettivo è quello di:

  • Scarica il file di Excel tramite la tecnologia AJAX XMLHttpRequest
  • memorizzare il contenuto (array di byte) in un Blob
  • Creare un data URI con il Blob
  • aprire i dati URI in un pop-up, che richiede all'utente di scaricare il file Excel

Quello che ho è questa:

Si scarica il file, ma quando provo ad aprire il file, Excel non lo riconosce come un file Excel valido.

// "data" is the contents from the server 

var reader = new FileReader(); 
var blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); 
reader.readAsDataURL(blob); 

reader.onloadend = function (e) { 
    window.open(reader.result, 'Excel', 'width=20,height=10,toolbar=0,menubar=0,scrollbars=no', '_blank'); 
} 
+0

Questo bisogno di lavorare in IE? –

+0

L'ho risolto (vedi risposta sotto), ma hai ragione, IE non supporta questo. Può essere reso disponibile per IE? – Gaui

risposta

7

Ho funzionato. Ho dovuto aggiungere il seguente al mio oggetto XMLHttpRequest:

responseType: 'arraybuffer' 

Ma non funziona in IE perché IE non può aprire URI di dati. Nemmeno IE11.

Comunque ho trovato a great library called FileSaver.js che gestisce il salvataggio dei file per tutti i principali browser (tra cui IE10 +)

Problemi correlati