我尝试了 400 种语法和标头的组合,但不知道如何从 Angular 进行 HTTP 调用以从我的 NodeJS 服务器检索文件。
在 Stackoverflow 上找到并尝试,无济于事:
从 http post 请求下载文件 - Angular 6
它不能是一个简单的<a download>标签或公共express.static()文件夹,因为对文件的访问受到限制,我需要传递一个 JWT 令牌(在 Node 中,我有一个 Express 身份验证中间件,如果没有提供令牌,它将拒绝请求在标题中或如果它无效)。
该文件是一个 GZIP :./dumps/dump.gz并且重 812 Kb。
我确实设法下载了该文件,但无论我尝试什么,它的大小都是 1.4 MB 或 94 字节(大小错误)并且无法打开 (7zip can't open file downloads/dump.gz as archive)。
我尝试过的Angular 端(多次尝试):
import { saveAs } from 'file-saver';
let headers = new Headers({
"Authorization": "Bearer …Run Code Online (Sandbox Code Playgroud) 我使用角4作为前端,而内腔5.4作为后端.
我的要求是将一些数据导出为excel和zip文件.
使用{ saveAs }从'file-saver/FileSaver';包导入文件下载.
Angular 4代码:
downloadExcel() {
const type = 'application/vnd.ms-excel';
const headers = { headers: new Headers({ 'Accept': type }) };
const filename = 'file.xls';
this.http.get('http://10.2.2.109/Download/exportExcel', headers)
.toPromise()
.then(response => this.saveToFileSystem(response, type, filename));
return false;
}
private saveToFileSystem(response, __type, filename) {
const contentDispositionHeader: string = response.headers.get('Content-Disposition');
if (contentDispositionHeader !== null) {
const parts: string[] = contentDispositionHeader.split(';');
//const filename = parts[1].split('=')[1];
const blob = new Blob([response._body], { type: __type });
saveAs(blob, filename);
} else …Run Code Online (Sandbox Code Playgroud)