node.js - 如何使用 Node.js/Express 转发从 API 接收的文件
问题描述
编辑:不是ExpressJS 中的管道远程文件的副本。在引用的问题中,可以通过 url 和GET
方法访问远程文件。这里不是这种情况,我在POST
请求后在响应有效负载中接收文件。
我有一个允许用户下载文档的前端。由于不相关的原因,该文档是由外部服务在用户每次请求时生成的(基于一些上下文数据)。所以管道是这样的:
- 用户点击前端链接
- 前端向后端发送
GET
请求 - 后端获取相关内部数据
POST
并向外部 API 发送请求 - 外部 API 发送一个包含文档本身的响应,带有适当的
content-disposition=attachment
和content-type
标题,以及响应正文中的文档。 - 我的后端将此转发到前端
- 提示用户下载链接
步骤 1 到 4 有效。我的问题是:
- 提示用户下载弹出窗口,文件类型正确(在我的示例中为 pdf),但 pdf 文件是一个空页面
- 如果我将与后端相同的请求发送到外部 API,但通过邮递员,我会得到我想要的具有正确内容的文件。
- 如果我将与前端相同的请求发送到后端但通过邮递员,我也会得到一个空的 pdf 文件。
我的猜测是我没有正确地将来自外部 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
解决方案
推荐阅读
- ms-word - 错误 - applescript 中的“未授权将 Apple 事件发送到 Microsoft Word”
- javascript - 从 api 中提取更好的格式数据
- xcode - 如何从 Xcode 中的命令行工具访问 MacOS 安全飞地
- microsoft-graph-api - 如何创建 Microsoft Teams 附带的日历事件链接到在线会议
- html - Bootstrap 按百分比展开菜单/导航栏,如果需要可滚动
- python - Python步进电机最短路径
- android - 如何在 Android 中更改起始目的地动态?
- git - Git合并覆盖我的本地分支文件而不发出合并冲突的信号
- sql - Bulk Loading CSV From Blob Storage to SQL Database
- ios - 解压缩来自服务器的 zip 文件,而不在 ios swift 中本地保存,类似于 android 的操作?