Ubuntu 服务器中的 stream.pipe(res) 无法从客户端向服务器发送 PDF
Sending a PDF from client to server isn't working with stream.pipe(res) in Ubuntu server
我有一个制作 PDF 并使用节点 js 将其发送到客户端的应用程序。该应用程序在本地完美运行,但当我将其托管在 Digital Ocean 的 Ubuntu 服务器中时,生成 PDF 的端点无法正常工作
这是将 PDF 发送到客户端的代码:
pdf.create(html, options).toStream((err, stream)=> {
if (err) {
res.json({
message: 'Sorry, we were unable to generate pdf',
});
}
stream.pipe(res)
});
在客户端,这是我与端点通信的方式
genratePdf({ commit }, data) {
axios.post('http://localhost:1337/getpdf', data,{ responseType:'arraybuffer' }).then((response) => {
let blob = new Blob([response.data],{type:'application/pdf'})
var link=document.createElement('a');
link.href=URL.createObjectURL(blob);
link.download="Report_"+new Date()+".pdf";
link.click();
}, (err) => {
console.log(err)
})
当我 运行 它在本地时它完美地工作:
但是当我在 Ubuntu Digital Ocean droplet 中托管时,另一个端点工作但生成的 PDF 一个不工作,它向我显示错误
我认为这是一个超时问题,应用程序没有等待流完成以通过管道将其传输到 res。
其实你的pdf生成有错误,但是因为你处理错误的时候没有返回,所以还是执行了stream.pipe
语句。
将您的代码更改为:
pdf.create(html, options).toStream((err, stream)=> {
if (err) {
console.error(err);
return res.json({
message: 'Sorry, we were unable to generate pdf',
});
}
return stream.pipe(res)
});
注意我添加了一个console.error(err);
,它可能会帮助你进一步调试。但我认为您正在使用的库使用 PhantomJS,它可能是一个错误,因为必须为 arch 编译 PhantomJS。
尝试rm -Rf ./node_modules && npm i
我有一个制作 PDF 并使用节点 js 将其发送到客户端的应用程序。该应用程序在本地完美运行,但当我将其托管在 Digital Ocean 的 Ubuntu 服务器中时,生成 PDF 的端点无法正常工作
这是将 PDF 发送到客户端的代码:
pdf.create(html, options).toStream((err, stream)=> {
if (err) {
res.json({
message: 'Sorry, we were unable to generate pdf',
});
}
stream.pipe(res)
});
在客户端,这是我与端点通信的方式
genratePdf({ commit }, data) {
axios.post('http://localhost:1337/getpdf', data,{ responseType:'arraybuffer' }).then((response) => {
let blob = new Blob([response.data],{type:'application/pdf'})
var link=document.createElement('a');
link.href=URL.createObjectURL(blob);
link.download="Report_"+new Date()+".pdf";
link.click();
}, (err) => {
console.log(err)
})
当我 运行 它在本地时它完美地工作:
但是当我在 Ubuntu Digital Ocean droplet 中托管时,另一个端点工作但生成的 PDF 一个不工作,它向我显示错误
我认为这是一个超时问题,应用程序没有等待流完成以通过管道将其传输到 res。
其实你的pdf生成有错误,但是因为你处理错误的时候没有返回,所以还是执行了stream.pipe
语句。
将您的代码更改为:
pdf.create(html, options).toStream((err, stream)=> {
if (err) {
console.error(err);
return res.json({
message: 'Sorry, we were unable to generate pdf',
});
}
return stream.pipe(res)
});
注意我添加了一个console.error(err);
,它可能会帮助你进一步调试。但我认为您正在使用的库使用 PhantomJS,它可能是一个错误,因为必须为 arch 编译 PhantomJS。
尝试rm -Rf ./node_modules && npm i