I have created a pdf with the browser in Javascript and sent it via post to the server using this code:
var blob = pdf.output('blob')
var xhr = new XMLHttpRequest();
xhr.open('post','/upload', true);
xhr.setRequestHeader("Content-Type", "application/pdf");
xhr.send(blob);
I would like to save as pdf on the server running Node with express. I have come up with the following code using express and body-parser package:
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 is a Buffer, Uint8Array[653120]:
I need help converting it back to pdf before saving in on the server. Any help would be appreciated. Thanks.
A buffer is a literal binary representation. Just write it to a file directly without .toString()
and it should be the file you want.
e.g. to try fs.writeFileSync('some.pdf', req.body)
I do not actually recommend using writeFileSync
- instead use writeFile
which is async and needs a callback, but won't block other http requests from being accepted.
A Buffer is just a sequence of bytes without any encoding. If you expect body to look like xml when you log it out, try .toString('utf8')
on it. hex/utf8/base64 are just representations of binary. They're like a function to unpack, or pack data. In this case you want the sequence of bytes in your buffer to exist on disk as-they-are; so messing with the encoding is undesirable.