2016-08-04 7 views
1

ich an einer Aufgabe arbeite, in dem ich einen Bericht in xlsx-Format herunterladen müssen. Die Reportdatei wurde erfolgreich vom Server generiert und wird auch vom Client (aurelia-http-client) empfangen, aber ich weiß nicht, wie ich mit dem Download weiter gehen soll.Download Excel-Datei über aurelia-http-Client

Antwort

0

ich so etwas wie in dieser Antwort https://stackoverflow.com/a/30270714/6677648

tun würde ... das wie ein response interceptor in Aurelia wie dies in etwas enden würde:

 .withResponseType('blob') 
     .withInterceptor({ 
      response(message) { 
       var defaultFileName = "default.txt"; 
       var disposition = message.headers.headers['content-disposition']?message.headers.headers['content-disposition']:message.headers.headers['Content-Disposition']; 
       if (disposition) { 
        var match = disposition.match(/.*filename=\"?([^;\"]+)\"?.*/); 
        if (match[1]) 
         defaultFileName = match[1]; 
       } 
       defaultFileName = defaultFileName.replace(/[<>:"\/\\|?*]+/g, '_'); 
       if (navigator.msSaveBlob) 
        return navigator.msSaveBlob(message.response, defaultFileName); 
       var blobUrl = window.URL.createObjectURL(message.response); 
       var anchor = document.createElement('a'); 
       anchor.download = defaultFileName; 
       anchor.href = blobUrl; 
       document.body.appendChild(anchor); 
       anchor.click(); 
       document.body.removeChild(anchor); 
      } 
     }) 
+0

Es funktioniert! Vielen Dank! – Lumdeia

0

Helo mit .withInterceptor() wurde erzeugt Fehler In der Antwort ändern Sie es, um den Fehler in keiner Antwort zu beheben und mehrere Dateien gleichzeitig zu entladen.

getLogsCsv(param) { 
    this.http.configure(config => { 
     config 
      .withResponseType('blob'); 
    }); 
    return this.http.get("/admin/api/logs" + param) 
     .then(response => { 
      if (response.statusCode == 200) { 
       var defaultFileName = "FileName.csv"; 
       var blobUrl = window.URL.createObjectURL(response.response); 
       var anchor = document.createElement('a'); 
       anchor.download = defaultFileName; 
       anchor.href = blobUrl; 
       document.body.appendChild(anchor); 
       anchor.click(); 
       document.body.removeChild(anchor); 
       return response.content; 
      } else { 
       console.log('response was not ok.'); 
       console.log(response); 
      } 
     }) 
     .catch(error => { 
      console.log(error); 
     }); 
} 
0

Ich habe die downloadjs Bibliothek verwendet. Installieren Sie die Bibliothek, fügen Sie es zu Ihrem aurelia.json und fügen Sie dann

import * as download from 'downloadjs' 

Dann wird Ihr Code wie folgt schreiben:

this.httpClient.fetch('your/url/here') 
    .then((response: Response) => response.blob()) 
    .then((blob: Blob) => download(blob, 'filename.extension', 'mime type of the file')); 

Und voila, wird die Datei heruntergeladen werden.