【发布时间】:2016-11-05 02:35:49
【问题描述】:
我有一个按钮定义为:
<button pButton type="button" label="Download" data-icon="fa-cloud-download" (click)="download()"></button>
download 方法委托给服务,服务通过 post 方法调用 api:
download(model:GlobalModel) {
let downloadURL = base + "rest/process/download";
let body = JSON.stringify(model);
let headers = new Headers({'Content-Type': 'application/json'});
let options = new RequestOptions({headers: headers});
this.http.post('http://localhost:48080/rest/process/download', body, options)
.toPromise()
.then(
response => {
console.log(response);
var mediaType = 'application/zip';
var blob = new Blob([response.blob()], {type: mediaType});
var filename = 'project.zip';
saveAs(blob, filename);//FileSaver.js libray
});
}
但是到目前为止blob() 方法还没有实现,还有其他使用_body 的答案,但是有一个打字稿错误,比如“_body 是私有的”。
浏览器显示下载窗口,但是当我下载文件时,文件已损坏且无法打开(我检查postman,文件已从服务器生成正常)。
我怎样才能正确下载文件?...如果不能,有可用的解决方法吗?
【问题讨论】:
-
如果你这样做会发生什么:
new Blob([response.text()], {type: mediaType})?text()应该返回响应的原始正文,我相信.. -
.text()创建一个损坏的文件