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");
}
derinlik kılavuz denetiminde
daha İçin, 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
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
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