Я использую backend back и мой api использует службу для отправки данных через OutputStreamWriter. Я могу загрузить это в угловых 2 с помощью события щелчка, как так:Angular 2 download .CSV file click event с аутентификацией
Машинописи
results(){
window.location.href='myapicall';
}
HTML
<button (click)="results()"
class="btn btn-primary">Export</button>
Это работает просто отлично; однако недавно я реализовал безопасность для своих API-конечных точек, и теперь я получаю 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 OK для URL: мой url
Фактически это не загружает данные.
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 = require ('файл-saver'); но, похоже, не работает – Bhetzie
какой загрузчик модуля вы используете? Я использую angular-cli, который использует веб-пакет. Чтобы включить сторонние библиотеки, вы добавляете путь к файлу в lib в 'angular-cli.json'. например, добавьте следующие «скрипты»: ["../node_modules/file-saver/FileSaver.js"], – shusson