首页 > 解决方案 > 如何使用 Node.js/Express 转发从 API 接收的文件

问题描述

编辑:不是ExpressJS 中的管道远程文件的副本。在引用的问题中,可以通过 url 和GET方法访问远程文件。这里不是这种情况,我在POST请求后在响应有效负载中接收文件。

我有一个允许用户下载文档的前端。由于不相关的原因,该文档是由外部服务在用户每次请求时生成的(基于一些上下文数据)。所以管道是这样的:

  1. 用户点击前端链接
  2. 前端向后端发送GET请求
  3. 后端获取相关内部数据POST并向外部 API 发送请求
  4. 外部 API 发送一个包含文档本身的响应,带有适当的content-disposition=attachmentcontent-type标题,以及响应正文中的文档。
  5. 我的后端将此转发到前端
  6. 提示用户下载链接

步骤 1 到 4 有效。我的问题是

我的猜测是我没有正确地将来自外部 API 的响应转发到前端。

我的代码:

function getDocFromExternalApi(req, res) {
    sendMyRequest().then(externalApiResponse => {
        res.status(200).header({ //headers appears to be what is expected
            'content-disposition': externalApiResponse.headers['content-disposition'], //= 'attachement; filename="someFileName.pdf"'
            'content-type': externalApiResponse.headers['content-type'] // = 'application/pdf'
        }).send(externalApiResponse.data) //externalApiResponse.data contains the file
    })
}

我还尝试将字符集添加到content-type适当的content-length标题中,但也没有骰子。

来自外部 API 的完整响应:https ://pastebin.com/5FX72eAX

标签: node.jsexpress

解决方案


推荐阅读