Node.js Can';t使用express.js强制下载pdf

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

我正在将express.js与pdfkit一起使用,试图生成一个pdf并强制在webbrowser中下载

我定义了存储pdf的静态位置,但是当我想读取这个位置并下载文件时,什么都不会发生。我也尝试过设置标题,但没有成功

我已经读到,这可能与服务器和前端运行的端口有关。在我的例子中,它们是:4200(角度)和8080(Node.js)

以下是服务器代码的片段:

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的新手,我忘了!完成:)