Javascript 在Angular 2中下载一个文件
我想在Angular 2中下载pdf格式的文件,我正在使用Javascript 在Angular 2中下载一个文件,javascript,angular,filesaver.js,Javascript,Angular,Filesaver.js,我想在Angular 2中下载pdf格式的文件,我正在使用FileSaver.js将文件另存为pdf格式 (response) => { var mediaType = 'application/pdf'; let pdfContent = response["_body"]; var blob = new Blob([pdfContent], {type: mediaType}); var filename = 'test.pdf'; //set
FileSaver.js
将文件另存为pdf格式
(response) => {
var mediaType = 'application/pdf';
let pdfContent = response["_body"];
var blob = new Blob([pdfContent], {type: mediaType});
var filename = 'test.pdf';
//setTimeout(FileSaver.saveAs(blob, filename),10000); //Tried this but no result
// FileSaver.saveAs(blob(), "docitt-report-" + documentNo + ".pdf"); //tried this too
},
但是下载的pdf文件是空的,我认为资源可能需要时间,所以我尝试使用setTimeout
,但仍然没有帮助。虽然响应中有一些数据,我可以在控制台中看到它们是response.\u body
告诉我哪里出了问题。
导入'rxjs/Rx';
this.\u reportService.getReport().subscribe(数据=>this.downloadFile(数据)),//console.log(数据),
error=>console.log(“下载文件时出错”),
()=>console.info(“确定”);
当请求准备就绪时,它将调用函数“downloadFile”,该函数定义如下
下载文件(数据:响应){
var blob=新blob([data],{type:'text/csv'});
var url=window.url.createObjectURL(blob);
窗口打开(url);
}
我让它工作了,下面是我的答案:
downloadDocument(docId){
const headers = new Headers({responseType:ResponseContentType.Blob});
headers.append('authorization','Bearer '+token);
this.http.get(url,{headers:headers,responseType:ResponseContentType.Blob}).subscribe(
(response) => {
FileSaver.saveAs(response.blob(), "Document-" + docId+ ".pdf");
}
);
}
导入FilSaver
import * as FileSaver from 'file-saver';
什么是
pdfContent
?它是一个加密字符串,出现在响应的“\u body”中。为什么希望“加密字符串”生成.pdf
文件?字符串是“加密字符串”还是base64
字符串?乍一看,数据似乎是“加密的”。您可以以Blob
或ArrayBuffer
的形式请求数据,请参见,似乎文件保护程序无法转换为pdf。