Apollo-link-rest: 是否可以使用 apollo-link-rest 提交文件对象?

创建于 2019-11-11  ·  5评论  ·  资料来源: apollographql/apollo-link-rest

一个示例查询:

  mutation register {
    register(
      input: {
        email: $email
        avatar: $avatar
        password: $password
      }
    ) @rest(type: "Register", path: "auth/register", method: "POST")
  }

该表单有一个文件输入,它发送一个 File 对象(这是 avatar 属性)。 记录头像变量时,我可以看到此属性已定义,但是当使用 apollo-link-rest 发送数据时,文件对象变为空。

在发送突变之前记录变量:
image

通过 apollo 向服务器发送数据时,对象为空:

image

我在文档中找不到任何关于上传文件的内容,所以我不确定这是否可行。

help wanted 🛠 question❔

所有5条评论

我相信这是可能的,因为我们必须修复一些与修改 File 对象相关的错误。

也就是说,我最近没有使用过这个,因为我在 react-native 上使用 Apollo-link-rest。

您可能需要通读我们的源代码来调试它并找出它可能不起作用的原因! 真正的修复可能是在 Apollo-client 而不是 Apollo-link-rest!

谢谢回复! 我主要是想检查我没有遗漏一些明显的东西,比如需要启用的设置,或者需要添加的链接:slightly_smiling_face:

例如,我看到有人提到在常规阿波罗中上传文件需要 apollo-upload-client (https://github.com/jaydenseric/apollo-upload-client)。

我不确定是否需要在 apollo-link-rest 中向客户端添加类似的链接?

不,这不适用于这里。

就在 7 月,有人发布了一个使用 apollo-link-rest 上传 react 文件的示例。

也许这有帮助?

https://github.com/apollographql/apollo-link-rest/issues/200#issuecomment -509287597

如果你弄明白了,也许我们应该写一个关于如何做到这一点的文档部分!

非常感谢@fbartho!

这个问题帮助解决了这个问题,我必须做的关键改变是将文件编码方法添加到bodySerializers

bodySerializers: {
    fileEncode: (data: any, headers: Headers) => {
      const formData = new FormData()
      formData.append('file', data, data.name)
      headers.set('Accept', '*/*')
      return { body: formData, headers }
    }
  }

还有您在查询中指定序列化程序的部分

@rest(
        type: "File"
        path: "YOUR_API_URL"
        method: "POST"
        bodySerializer: "fileEncode"
      ) {

如果文档中有这样的内容,那将非常有帮助。 再次感谢!

此页面是否有帮助?
0 / 5 - 0 等级