gpt4 book ai didi

node.js - apollo graphql 查询上传的文件

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:31 25 4
gpt4 key购买 nike

Apollo Server 2.0 能够接收文件上传,如 this blog post 中所述。 .

但是,我找到的所有教程和博客文章都只展示了如何上传文件。没有人演示如何实际检索文件并将其显示在屏幕上。

有人知道如何正确查询文件内容以在屏幕上显示吗?
另外,可能无法查询文件,而您必须构建一个单独的休息端点来检索内容?

一些想法:
我想象查询是这样的

query {
fetchImage(id: 'someid')
}

使用各自的服务器端定义

type Query {
fetchImage(id : ID!): Upload //maybe also a custom type, but how do I include the actual file contents?
}

Hint: Upload is a scalar type that apollo-server automatically adds to your type definition. It is used for the upload so I imaging it also being usable for the download/query. Please read the blog post mentioned above for more information.

最佳答案

来自 GraphQL 服务的响应始终序列化为 JSON 对象。从技术上讲,序列化中可以使用 JSON 以外的格式,但实际上仅使用 JSON,因为它满足 serialization requirements in the spec 。因此,通过 GraphQL 发送文件的唯一方法是将文件转换为某种与 JSON 兼容的格式。例如,您可以将 Buffer 转换为字节数组并将其作为整数数组发送。您还必须发送适当的 mime 类型。客户端在收到响应后将字节数组转换回可用格式。

如果您选择这条路线,则必须使用自己的标量或对象类型 - Upload 标量不支持序列化,因此如果您尝试将其用作输出类型,则会抛出异常(而且它实际上并不适合此类事情)。

但是,虽然这样做在技术上是可行的,但也是不建议的。序列化较大的文件可能会导致内存不足,因为无法通过 GraphQL 传输数据(整个响应必须位于内存中才能发送)。静态地提供文件要好得多 ( ideally using nginx instead of Node )。如果您的 API 需要引用该文件,它只需返回文件的路径即可。

关于node.js - apollo graphql 查询上传的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57660226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com