Apollo-link-rest: É possível enviar objetos de arquivo com apollo-link-rest?

Criado em 11 nov. 2019  ·  5Comentários  ·  Fonte: apollographql/apollo-link-rest

Um exemplo de consulta:

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

O formulário possui uma entrada de arquivo que envia um objeto File (esta é a propriedade avatar). Ao registrar a variável avatar posso ver que esta propriedade está definida, porém ao enviar os dados com apollo-link-rest o objeto de arquivo fica vazio.

Registrando a variável antes de enviar a mutação:
image

Ao enviar os dados para o servidor via Apollo, o objeto está vazio:

image

Não consegui encontrar nenhuma menção de upload de arquivos no doc, então não tenho certeza se é algo que é possível.

help wanted 🛠 question❔

Todos 5 comentários

Acredito que isso seja possível, pois tivemos que corrigir alguns bugs relacionados à mutilação de objetos File.

Dito isso, não usei isso recentemente, pois uso Apollo-link-rest no react-native.

Você pode ter que ler nosso código-fonte para depurar isso e descobrir por que ele pode não estar funcionando! É possível que a verdadeira correção esteja no Apollo-client e não no Apollo-link-rest!

Obrigado pela resposta! Eu queria principalmente verificar se não estava faltando algo óbvio, como uma configuração que precisa ser habilitada ou um link que precisa ser adicionado: ligeiramente_smiling_face:

Por exemplo, vi algumas pessoas mencionarem que o apollo-upload-client (https://github.com/jaydenseric/apollo-upload-client) é necessário para uploads de arquivos no Apollo regular.

Não tenho certeza se um link semelhante precisa ser adicionado ao cliente em apollo-link-rest.

Não, isso não se aplica aqui.

Recentemente, em julho, alguém postou um exemplo de upload de arquivo react usando apollo-link-rest.

Talvez isso ajude?

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

Se você descobrir, talvez devêssemos escrever uma seção de documento sobre como fazer isso!

Muito obrigado @fbartho!

Esse problema ajudou a resolver o problema, as principais mudanças que tive que fazer foram adicionar o método de codificação de arquivo ao bodySerializers

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

E também a parte onde você especifica o serializador na consulta

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

Seria muito útil se algo assim estivesse nos documentos. Obrigado novamente!

Esta página foi útil?
0 / 5 - 0 avaliações