2017-10-22 4 views
2

Ich möchte auf den neuen HttpClient wechseln. Bis jetzt ich mit Datei herunterlädt, die folgenden:Angular 4.3: Einen Array-Puffer mit neuen HttpClient

getXlsx(): Observable<any> { 
    return this.http.get('api/xlsx', { 
     responseType: ResponseContentType.ArrayBuffer, // set as ArrayBuffer instead of Json 
    }) 
    .map(res => downloadFile(res, 'application/xlsx', 'export.xlsx')) 
    .catch(err => handleError(err)); 
    } 

export function downloadFile(data: any, type: string, filename: string): string { 
    const blob = new Blob([data._body], { type }); 
    const url = window.URL.createObjectURL(blob); 

    // create hidden dom element (so it works in all browsers) 
    const a = document.createElement('a'); 
    a.setAttribute('style', 'display:none;'); 
    document.body.appendChild(a); 

    // create file, attach to hidden element and open hidden element 
    a.href = url; 
    a.download = filename; 
    a.click(); 
    return url; 
} 

Ändern der respondeType zu ‚Arraybuffer‘ in leere Dateien führen. Irgendwelche Ideen, wie man es löst?

+2

Haben Sie auch versucht, 'response zu verwenden:‚blob'' + die 'neuen Blob()' zu entfernen? –

+0

Vielen Dank! Es funktioniert! – Luke

Antwort

4

So hat Martin mein Problem gelöst:

getXlsx(): Observable<any> { 
    return this.http.get('api/xlsx', { 
     responseType: 'blob' // <-- changed to blob 
    }) 
    .map(res => downloadFile(res, 'application/xlsx', 'export.xlsx')) 
    .catch(err => handleError(err)); 
    } 

export function downloadFile(blob: any, type: string, filename: string): string { 
    const url = window.URL.createObjectURL(blob); // <-- work with blob directly 

    // create hidden dom element (so it works in all browsers) 
    const a = document.createElement('a'); 
    a.setAttribute('style', 'display:none;'); 
    document.body.appendChild(a); 

    // create file, attach to hidden element and open hidden element 
    a.href = url; 
    a.download = filename; 
    a.click(); 
    return url; 
} 
Verwandte Themen