У меня есть следующий сервис, который позволяет мне скачивать файл, используя http Get
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import { saveAs } from 'file-saver';
@Injectable()
export class FileService {
blob: Blob;
url: string;
constructor(private _http: Http) { }
uploadFile(file: File, filetype: string) {
console.log('uploading...');
const endpoint = 'http://localhost:60994/api/file';
const formData: FormData = new FormData();
formData.append(filetype, file, file.name);
return this._http.post(endpoint, formData);
}
getFile() {
return this._http.get('http://localhost:60994/api/file')
.subscribe(data => {
if (data != null)
{
this.blob = new Blob([data._body], { type: 'application/vnd.ms-excel' });
const file = new File([this.blob], 'report.xlsx', { type: 'application/vnd.ms-excel' });
console.log(this.blob);
console.log(file);
this.url = window.URL.createObjectURL(file);
window.open(this.url);
}
});
}
}
Файл (xlsx, xls) при загрузке в основном поврежден без данных (Файл, отправленный сервером, содержит данные, и я сам проверил это). Также
console.log(this.blob);
и
console.log(file);
показать файл с почти точным размером файла, ожидаемым от сервера (в консоли chrome).
Лучшее предположение, которое я выдвинул, заключается в том, что я ошибаюсь при восстановлении полученного файла.