Express.js - how to download base64 string as PDF file?
I ended up to decode the pdf first and then send it to the browser as binary as follows:
(For simplicity I use node-http
here but the functions are available in express
as well)
const http = require('http');http .createServer(function(req, res) { getEncodedPDF(function(encodedPDF) { res.writeHead(200, { 'Content-Type': 'application/pdf', 'Content-Disposition': 'attachment; filename="filename.pdf"' }); const download = Buffer.from(encodedPDF.toString('utf-8'), 'base64'); res.end(download); }); }) .listen(1337);
What drove me nuts here was the testing with Postman:
I was using the Send Button instead of the Send and Download Button to submit the request:
Using the Send button for this request causes that the pdf file becomes corrupted after saving.
Just a reference for Express
. This answer is based on ofhouse's answer.
This solution is downloading a png file. I was missing the "Content-Disposition" part, which makes the browser not display the png, but download it. png
is a Buffer
-object.
app.get("/image", (req, res) => { getPng() .then((png) => { res.writeHead(200, { "Content-Type": png.ContentType, "Content-Length": png.ContentLength, "Content-Disposition": 'attachment; filename="image.png"', }); res.end(png.Body); }) .catch(() => { res.send("Couldn't load the image."); });});