Express.js - 如何下载base64字符串作为PDF文件?

时间:2015-02-17 18:44:16

标签: node.js file express stream base64

我将pdf文件编码为base64字符串。如何以.pdf格式将此字符串下载到浏览器?

我已经尝试过:

res.set('Content-Disposition', 'attachment; filename="filename.pdf"');
res.set('Content-Type', 'application/pdf');

res.write(fileBase64String, 'base64');

2 个答案:

答案 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来提交请求:enter image description here

但是对此请求使用发送按钮会导致保存后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.");
      });
});