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:
Ao enviar os dados para o servidor via Apollo, o objeto está vazio:
Não consegui encontrar nenhuma menção de upload de arquivos no doc, então não tenho certeza se é algo que é possível.
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!