我正在尝试使用 Angular 2/TypeScript 和 Web API 下载文件。我遇到的问题是,当下载文本文件时,该文件是文件,但是当尝试下载 PDF 文件时,例如,它已损坏。下载的文件内容都是乱码废话。
我使用的 TypeScript 如下:
downloadFile(fileId: string): Observable<File> {
this.applicationsUrl = `${APIConfig.BaseUrl}/documents/download/${fileId}/`;
let headers = new Headers({ 'Content-Type': 'application/json', 'MyApp-Application' : 'AppName' });
let options = new RequestOptions({ headers: headers });
return this.http.post(this.applicationsUrl, '', options)
.map(this.extractContent)
.catch(this.handleError);
}
private extractContent(res: any) {
let blob: Blob = new Blob([res._body], { type: 'application/pdf'});
window['saveAs'](blob, 'test.pdf');
}
window['saveAs'] 只是访问 JavaScript FileSaver.js 函数的解决方法。
此外,我已将 res:Response 设置为 res:any,这样我就可以在 JavaScript 下访问私有 _body 属性,而不会在 TypeScript 中出现编译失败。
任何帮助将不胜感激。
从 Angular RC5 开始,以下代码应该适合您:
downloadFile(fileId: string): Observable<File> {
this.applicationsUrl = `${APIConfig.BaseUrl}/documents/download/${fileId}/`;
let headers = new Headers({ 'Content-Type': 'application/json', 'MyApp-Application' : 'AppName', 'Accept': 'application/pdf' });
let options = new RequestOptions({ headers: headers, responseType: ResponseContentType.Blob });
return this.http.post(this.applicationsUrl, '', options)
.map(this.extractContent)
.catch(this.handleError);
}
private extractContent(res: Response) {
let blob: Blob = res.blob();
window['saveAs'](blob, 'test.pdf');
}
我有一个类似的问题并将 Accept-Header 设置为application/pdf
, 响应类型为Blob
并通过响应上相应的方法访问 blob 为我解决了这个问题:)
(我也在使用 FileSaver)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)