我将pdf文件编码为base64字符串。如何以.pdf格式将此字符串下载到浏览器?
我已经尝试过:
res.set('Content-Disposition', 'attachment; filename="filename.pdf"');
res.set('Content-Type', 'application/pdf');
res.write(fileBase64String, 'base64');
答案 0 :(得分:9)
我最终先解码pdf,然后将其作为二进制文件发送到浏览器,如下所示:
(为简单起见,我在这里使用node-http
,但这些功能也可以在express
中使用
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);
让我疯狂的是用Postman进行的测试:
我使用发送按钮而不是发送和下载 Button来提交请求:
但是对此请求使用发送按钮会导致保存后pdf文件损坏。
答案 1 :(得分:0)
只是 Express
的参考。此答案基于 ofhouse 的答案。
此解决方案正在下载 png 文件。我错过了“内容处理”部分,这使得浏览器不显示 png,而是下载它。 png
是一个 Buffer
对象。
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.");
});
});