如何通过Websocket协议在GraphQL中处理文件上传?

时间:2019-12-16 06:39:58

标签: graphql apollo react-apollo apollo-client apollo-server

我正在创建一个使用GraphQL的Web应用程序,要求是通过WebSocket处理GraphQL操作。尽管我通过使用subscriptions-transport-ws设法实现了这一目标。但是,我对处理文件上载非常感兴趣。并且我以某种方式使用socket.io-stream遇到了从客户端到服务器的流文件,但是这导致了两个用于文本数据和文件的独立API。因此,我想知道是否有一种方法可以将此功能组合到GraphQL中。

2 个答案:

答案 0 :(得分:1)

我遇到了完全相同的问题,并且我的文件大小太大,以至于转换为base64都不可行。我也不想在GraphQL之外使用单独的库,因为这将需要在服务器中进行大量设置更改(以同时处理GraphQL和非GraphQL)。

幸运的是,解决方案最终变得非常简单。我在前端创建了两个GraphQL客户端-一个用于我的大部分流量都是通过WebSockets独占的,另一个是通过HTTP仅用于涉及文件上传的操作。

现在,我可以根据操作是否涉及文件上传来简单地指定我想要的客户端,而无需在服务器上进行复杂的更改或影响所有其他查询的实时利益。

答案 1 :(得分:0)

当前,我也正在为此找到合适的解决方案,但是您可以使用另一种方法,即将文件数据转换为base64并将该数据作为字符串传递。这种方法仅适用于小文件,因为字符串数据类型不能像缓冲区那样存储大量数据。