节点js将pdf Buffer转换回pdf

时间:2018-04-08 21:01:12

标签: node.js express xmlhttprequest pdf-generation body-parser

我在Javascript中使用浏览器创建了一个pdf,并使用以下代码通过post发送到服务器:

var blob = pdf.output('blob')
var xhr = new XMLHttpRequest();
xhr.open('post','/upload', true);
xhr.setRequestHeader("Content-Type", "application/pdf");                                
xhr.send(blob);

我想在运行Node with express的服务器上保存为pdf。我使用express和body-parser包提出了以下代码:

const bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({ limit: '1gb', extended: false }));
app.use(bodyParser.raw({ limit: '1gb', type: 'application/pdf' }));

app.post('/upload', function(req, res){
   console.log(req.body);      
}

req.body是一个缓冲区,Uint8Array [653120]:

在保存到服务器之前,我需要帮助将其转换回pdf。任何帮助,将不胜感激。感谢。

1 个答案:

答案 0 :(得分:3)

缓冲区是文字二进制表示。只需将其直接写入文件而不使用.toString(),它应该是您想要的文件。

e.g。尝试fs.writeFileSync('some.pdf', req.body)

我实际上并不建议使用writeFileSync - 而是使用异步的writeFile并需要回调,但不会阻止其他http请求被接受。

缓冲区只是一个没有任何编码的字节序列。如果您在注销时希望body看起来像xml,请尝试使用.toString('utf8')。 hex / utf8 / base64只是二进制的表示。他们喜欢打开包装或打包数据的功能。在这种情况下,您希望缓冲区中的字节序列按原样存在于磁盘上;所以搞乱编码是不可取的。