用于文件下载的 GraphQL 端点

Posted

技术标签:

【中文标题】用于文件下载的 GraphQL 端点【英文标题】:GraphQL endpoint for file download 【发布时间】:2019-03-20 10:09:34 【问题描述】:

是否可以通过apollo-server-express 应用程序上的 GraphQL 端点在浏览器中触发文件下载?

我有一个用标准 express app.get 函数编写的端点(见下文),但我想利用 GraphQL 上下文进行文件下载,所以我想知道是否可以从 GraphQL 下载端点。

这是我在 app.get 函数中的 express 端的一个简单示例:

app.get('/download-batch/:batchId', async (req, res) => 
  res.send(new Buffer('test'));
);

任何帮助我都会非常感激。谢谢!

【问题讨论】:

您好,我也有从 graphql 端点下载 csv 的相同要求。你有解决办法吗? @AshishPanchal 我坚持这种做事路线,只是通过普通的 Express.js 路线,但我最近没有回来重新审视它。 【参考方案1】:

是的,但您需要为此创建一个自定义端点。您不能使用用于发出请求的现有端点。 使用自定义端点,您必须添加一个中间件并将数据处理到缓冲区或您需要的任何格式中。但不建议这样做。这将再次成为一个端点,而不是您可以编写一个 API 来服务它。(毕竟 graphql 主要是建立在单个端点的焦点上)。

【讨论】:

【参考方案2】:

Boštjan Cigan 提到了here 一些解决方案,并提供了有关使用 GraphQL 作为 Minio 代理的详细信息。后端会要求 Mino 生成一个临时链接,该链接可以发送回浏览器直接访问。

这是适用于许多用例的有效解决方案。

【讨论】:

以上是关于用于文件下载的 GraphQL 端点的主要内容,如果未能解决你的问题,请参考以下文章

多端点 Graphql

使用 GraphiQL 或 GraphQL 端点生成 schema.json

如何将这个现有的 json 转换为 GraphQL 端点?

如何使用 Passport 对 GraphQL 端点进行身份验证?

如何为 graphql-java-servlet 和 Micronaut 控制器配置 GraphQL servlet 端点?

GraphQL 服务器端流式实现