我在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。任何帮助,将不胜感激。感谢。
答案 0 :(得分:3)
缓冲区是文字二进制表示。只需将其直接写入文件而不使用.toString()
,它应该是您想要的文件。
e.g。尝试fs.writeFileSync('some.pdf', req.body)
我实际上并不建议使用writeFileSync
- 而是使用异步的writeFile
并需要回调,但不会阻止其他http请求被接受。
缓冲区只是一个没有任何编码的字节序列。如果您在注销时希望body看起来像xml,请尝试使用.toString('utf8')
。 hex / utf8 / base64只是二进制的表示。他们喜欢打开包装或打包数据的功能。在这种情况下,您希望缓冲区中的字节序列按原样存在于磁盘上;所以搞乱编码是不可取的。