मैं एक वसंत बूट बैकएंड का उपयोग कर रहा हूं और मेरा एपीआई आउटपुटस्ट्रीमवाइटर के माध्यम से डेटा भेजने के लिए एक सेवा का उपयोग करता है। मैं बहुत की तरह एक क्लिक करें घटना का उपयोग कर कोणीय 2 में इस डाउनलोड कर सकते हैं:कोणीय 2 डाउनलोड .एसएसवी फ़ाइल प्रमाणीकरण के साथ घटना पर क्लिक करें
टाइपप्रति
results(){
window.location.href='myapicall';
}
एचटीएमएल
<button (click)="results()"
class="btn btn-primary">Export</button>
यह सिर्फ ठीक काम करता है; हालांकि, मैंने हाल ही में अपने एपीआई एंडपॉइंट्स के लिए सुरक्षा लागू की है और अब जब भी मैं कॉल करने की कोशिश करता हूं तो मुझे 401 प्राप्त होता है क्योंकि यह हेडर नहीं भेज रहा है।
मैंने एक सेवा लिखी है जिसे मैं कंसोल में परिणाम देख सकता हूं, लेकिन मुझे यह नहीं लगता कि फ़ाइल को कैसे डाउनलोड किया जाए।
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});
}
}
मैं के रूप में इस पोस्ट में सुझाव दिया एक ब्लॉब के माध्यम से डेटा डाउनलोड करने की कोशिश की: How do I download a file with Angular2
फ़ाइल डाउनलोड हो जाता है कि प्रकार फ़ाइल की है और सामग्री है:
स्थिति के साथ प्रतिक्रिया: 200 यूआरएल के लिए ठीक है: मेरा यूआरएल
यह वास्तव में डेटा डाउनलोड नहीं करता है।
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");
}
यही समस्या थी में, धन्यवाद! मुझे लगता है कि मैं शायद अपनी सेवा में पाठ के लिए एक नक्शा कर सकता हूं। मैं FileSaver.js पर एक नज़र डालेगा, उम्मीद कर रहा हूं कि यह टाइप फ़ाइल के रूप में सहेजने की मेरी समस्या को ठीक करेगा। – Bhetzie
क्या आपको पता है कि saveAs फ़ंक्शन को पहचानने के लिए मुझे अपने घटक में क्या जोड़ना है? मैंने कोशिश की: var FileSaver = आवश्यकता ('फ़ाइल-सेवर'); लेकिन – Bhetzie
काम नहीं कर रहा है आप किस मॉड्यूल लोडर का उपयोग कर रहे हैं? मैं कोणीय-क्ली का उपयोग कर रहा हूं जो वेबपैक का उपयोग करता है। तृतीय पक्ष libs को शामिल करने के लिए आप 'angular-cli.json' में libp में फ़ाइलपैथ जोड़ते हैं। उदाहरण के लिए निम्नलिखित स्क्रिप्ट जोड़ें: ["../node_modules/file-saver/FileSaver.js"], – shusson