2016-12-05 21 views
8

Bir bahar önyükleme arka uç kullanıyorum ve api bir OutputStreamWriter aracılığıyla veri göndermek için bir hizmet kullanır. Bir tıklama etkinliği şöyle kullanarak Eğik 2'de bu indirebilirsiniz:Açısal 2 indir .CSV dosya tıklama olayı kimlik doğrulaması ile

typescript

results(){ 
window.location.href='myapicall'; 
} 

Bu sadece iyi çalışır

<button (click)="results()" 
        class="btn btn-primary">Export</button> 

HTML; Ancak, son zamanlarda benim api uç noktalarım için güvenlik uyguladım ve şimdi bir başlık göndermiyor çünkü çağrı yapmaya çalıştığım her zaman bir 401 alıyorum.

Konsolda sonuçları görebildiğim bir hizmet yazdım, ancak dosyayı nasıl indireceğimi anlayamıyorum.

DownloadFileService

import {Injectable} from '@angular/core'; 
import { Http, Headers } from '@angular/http'; 
import 'rxjs/Rx'; 

@Injectable() 
export class DownloadFileService { 

    headers:Headers; 
    bearer: string; 
    constructor(public http: Http) {} 



    getFile(url:string) { 
     this.bearer = 'Bearer '+ localStorage.getItem('currentUser'); 
     this.headers = new Headers(); 
     this.headers.append('Authorization', this.bearer); 

     return this.http.get(url, {headers: this.headers}); 
    } 



} 

bu yazı önerildiği gibi bir damla yoluyla veri indirme çalıştı: How do I download a file with Angular2

indirilen alır dosya türü Dosya ve içeriği:

Durumun Yanıtı: 200 URL için Tamam: benim URL

Aslında bu verileri karşıdan yüklemiyor. Sadece Ayrıca

let parsedResponse = data.text(); 
this.downloadFile(parsedResponse); 

yani yanıtın vücudu ayrıştırmak gerekiyor ben standart bir yol olarak görünmüyor 2016 yılında bile gibi dosyaları indirmek için FileSaver kullanmak öneriyoruz gibi

downloadFile(data: any){ 
     var blob = new Blob([data], { type: 'text/csv' }); 
     var url= window.URL.createObjectURL(blob); 
     window.open(url); 
    } 



    results(){ 
     // window.location.href='myapicall'; 

     let resultURL = 'myapicall'; 

     this.downloadfileservice.getFile(resultURL).subscribe(data => this.downloadFile(data)),//console.log(data), 
      error => console.log("Error downloading the file."), 
      () => console.info("OK"); 



    } 

cevap

6

görünüyor Bunu tarayıcılar arasında yapmak için. sorun here

+0

derinlik kılavuz denetiminde

daha İçin
let blob = new Blob([data], { type: 'text/csv' }); saveAs(blob, "data.txt"); 

, teşekkür ederim! Muhtemelen hizmetimde metne bir harita yapabileceğimi farz ediyorum. FileSaver.js'ye bakacağım, bunun benim tip problemi olarak kaydetme problemimi çözeceğini umuyoruz. – Bhetzie

+0

SaveAs işlevini tanımak için bileşenime neleri eklemem gerektiğini biliyor musunuz? Denedim: var FileSaver = gerektiren ('dosya koruyucu'); ama çalışmıyor – Bhetzie

+1

hangi modül yükleyici kullanıyorsunuz? Webpack kullanan angular-cli kullanıyorum. 3. parti lib'leri dahil etmek için dosya yolunu 'angular-cli.json'daki lib'e eklersiniz. Örneğin, aşağıdaki "" komut dosyalarını "ekleyin: [" ../node_modules/file-saver/FileSaver.js "], – shusson