Node.js将PDF缓冲区转换回PDF

12

我用 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和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 是一个 Buffer,Uint8Array [653120]:

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

1个回答

9

缓冲区是一个文字二进制表示。直接将其写入文件而不使用.toString(),那么它就应该是你想要的文件。

例如:尝试使用fs.writeFileSync('some.pdf', req.body)

我并不推荐使用writeFileSync,而是使用需要回调函数的异步writeFile,这样不会阻塞其他HTTP请求的接受。

缓冲区只是一个没有任何编码的字节序列。如果您期望在记录日志时看到body类似于XML,请尝试对其使用.toString('utf8')。十六进制/UTF8/Base64只是二进制的表示方式。它们像一个解包或打包数据的功能。在这种情况下,您希望缓冲区中的字节序列按原样存在于磁盘上,因此更改编码是不可取的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接