Node.js Can';t使用express.js强制下载pdf
我正在将express.js与pdfkit一起使用,试图生成一个pdf并强制在webbrowser中下载 我定义了存储pdf的静态位置,但是当我想读取这个位置并下载文件时,什么都不会发生。我也尝试过设置标题,但没有成功 我已经读到,这可能与服务器和前端运行的端口有关。在我的例子中,它们是:4200(角度)和8080(Node.js) 以下是服务器代码的片段:Node.js Can';t使用express.js强制下载pdf,node.js,express,pdfkit,Node.js,Express,Pdfkit,我正在将express.js与pdfkit一起使用,试图生成一个pdf并强制在webbrowser中下载 我定义了存储pdf的静态位置,但是当我想读取这个位置并下载文件时,什么都不会发生。我也尝试过设置标题,但没有成功 我已经读到,这可能与服务器和前端运行的端口有关。在我的例子中,它们是:4200(角度)和8080(Node.js) 以下是服务器代码的片段: var downl = doc.pipe(fs.createWriteStream('C:/Users/Martyna/Desktop/t
var downl = doc.pipe(fs.createWriteStream('C:/Users/Martyna/Desktop/test pdfow/out.pdf') );
doc.end();
downl.on('finish', function() {
res.download('C:/Users/Martyna/Desktop/test pdfow/out.pdf', 'out.pdf');
})
您需要在响应中添加以下标题。下载而不是查看文件
Content-Type: application/pdf
Content-Disposition: attachment; filename="You_File_Name.pdf"
要向浏览器指示应在浏览器中查看文件,请执行以下操作:
Content-Type: application/pdf
Content-Disposition: inline; filename="You_File_Name.pdf"
您需要在响应中添加以下标题。下载而不是查看文件
Content-Type: application/pdf
Content-Disposition: attachment; filename="You_File_Name.pdf"
要向浏览器指示应在浏览器中查看文件,请执行以下操作:
Content-Type: application/pdf
Content-Disposition: inline; filename="You_File_Name.pdf"
只需读取文件并将其作为响应发送即可。 这个代码适合我
fs.readFile('C:/Users/Martyna/Desktop/test pdfow/out.pdf',(err,data)=>{
if(err){
consol.log(err);
}else {
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=your_file_name_for_client.pdf');
res.send(data)
}
})
只需读取文件并将其作为响应发送即可。 这个代码适合我
fs.readFile('C:/Users/Martyna/Desktop/test pdfow/out.pdf',(err,data)=>{
if(err){
consol.log(err);
}else {
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=your_file_name_for_client.pdf');
res.send(data)
}
})
您是如何向客户提出请求的?您在浏览器开发工具的网络部分看到了什么:您看到请求了吗?您看到响应了吗?createAuthHeaders(){this.loadToken();this.options=newRequestOptions({headers:newheaders({'Content Type':'application/json','authorization':this.authToken});}loadToken()即使我没有在服务器响应中设置它,您如何从客户端发出请求?您在浏览器开发工具的网络部分看到了什么:您看到请求了吗?您看到响应了吗?createAuthHeaders(){this.loadToken();this.options=newRequestOptions({headers:newheaders({'Content Type':'application/json','authorization':this.authToken});}loadToken()尽管我没有在服务器响应中设置它,但我添加了:res.writeHead(200,{'Content-Type':'application/pdf','Content-Disposition':'attachment;filename=out.pdf'});我的控制台中出现了一个错误:错误:发送邮件后无法设置邮件头。您使用了错误的方法-res.set('Content-Type','application/pdf');res.set('Content-Type','attachment;filename=“You_File_Name.pdf”);res.sendFile(uu dirname,'files/out.pdf');知道了!如您所说,设置内容类型和内容配置实际上很有帮助,谢谢!我还将客户端站点上的responseType指定给Blob,然后在http get方法中我编写了以下内容:testGetId(cv:cv){this.createAuthHeaders2();返回this.http.get(this.domain+/konto-uzytkownika/'+cv.cvId,this.options)。订阅(res=>{console.log(res)var-Blob=new Blob([res.Blob()]),{type:'application/pdf'});saveAs(blob,cv.pdf);}呜呜,太棒了。你为什么不接受这个答案?对不起,我是stackoverflow的新手,我忘了!完成:)我添加了:res.writeHead(200,{'contenttype':'application/pdf','contentdisposition':'attachment;filename=out.pdf'});我的控制台中出现了一个错误:错误:发送邮件后无法设置邮件头。您使用了错误的方法-res.set('Content-Type','application/pdf');res.set('Content-Type','attachment;filename=“You_File_Name.pdf”);res.sendFile(uu dirname,'files/out.pdf');知道了!如您所说,设置内容类型和内容配置实际上很有帮助,谢谢!我还将客户端站点上的responseType指定给Blob,然后在http get方法中我编写了以下内容:testGetId(cv:cv){this.createAuthHeaders2();返回this.http.get(this.domain+/konto-uzytkownika/'+cv.cvId,this.options)。订阅(res=>{console.log(res)var-Blob=new Blob([res.Blob()]),{type:'application/pdf'});saveAs(blob,cv.pdf);}呜呜,太棒了。你为什么不接受这个答案?对不起,我是stackoverflow的新手,我忘了!完成:)