GraphQL/Apollo 从服务器下载文件的应用程序

GraphQL/Apollo application with file download from server

我对 GraphQL 有点陌生,这个问题属于“它不可能这么难。我必须遗漏一些东西。”

我有一个相当标准的 GraphQL/Apollo/React 应用程序分为客户端和服务器。客户端进行 API 调用并从服务器取回数据时一切正常。客户端甚至可以将文件上传到服务器。但是,我现在需要服务器流回保存在磁盘上的文件。就是这样。

这是“我必须遗漏一些东西”的部分。我在文档和 Whosebug 上看到的所有内容都是将文件从服务器推回并通过 GraphQL 查询作为 base64-endocded 字符串的一些变体,然后在客户端上做一些非常 hacky 的东西,通常涉及隐藏的 href 标签和模拟点击。对此我说,“什么???”

说真的。磁盘上有服务器知道如何查找的文件。客户端需要向用户显示一个按钮,用户可以单击该按钮来下载文件。而已。其他所有语言的其他框架都有一种简单的方法来做到这一点。有人可以告诉我我在这里缺少的非常简单的东西吗?

谢谢, 亚历克斯

您缺少的是 GraphQL 确实不应该用于此目的。

虽然 GraphQL 本身 does not specify a specific format for serializing responses,但事实上的格式是 JSON。在 JSON 响应中获取文件的唯一方法是将其序列化为字符串。

如果您想提供静态内容,您应该设置 Nginx、Apache 或其他考虑到这一点的网络服务器。或者,如果您已经在使用一些现有的网络服务器库,如 Express,它很可能也有提供静态内容的工具。

仅仅因为您拥有 GraphQL 端点并不一定意味着它应该是您的客户端与后端通信的唯一方式。