Una consulta de ejemplo:
mutation register {
register(
input: {
email: $email
avatar: $avatar
password: $password
}
) @rest(type: "Register", path: "auth/register", method: "POST")
}
El formulario tiene una entrada de archivo que envía un objeto Archivo (esta es la propiedad del avatar). Al registrar la variable de avatar, puedo ver que esta propiedad está definida, sin embargo, al enviar los datos con apollo-link-rest, el objeto de archivo se vuelve vacío.
Registrando la variable antes de enviar la mutación:
Al enviar los datos al servidor a través de apollo, el objeto está vacío:
No pude encontrar ninguna mención sobre la carga de archivos en los documentos, por lo que no estoy seguro de si es posible.
Creo que esto es posible, ya que tuvimos que corregir algunos errores relacionados con la manipulación de objetos de archivo.
Dicho esto, no he usado esto recientemente, ya que uso Apollo-link-rest en react-native.
¡Es posible que deba leer nuestra fuente para depurar esto y descubrir por qué podría no estar funcionando! ¡Es posible que la solución real esté en Apollo-client, no en Apollo-link-rest!
¡Gracias por la respuesta! Principalmente quería comprobar que no me faltaba algo obvio, como una configuración que debe habilitarse o un enlace que debe agregarse: mild_smiling_face:
Por ejemplo, he visto a algunas personas mencionar que se requiere apollo-upload-client (https://github.com/jaydenseric/apollo-upload-client) para cargar archivos en apollo normal.
No estoy seguro de si es necesario agregar un enlace similar al cliente en apollo-link-rest.
No, eso no se aplica aquí.
Recientemente, en julio, alguien publicó un ejemplo de carga de archivo react usando apollo-link-rest.
¿Quizás esto ayude?
https://github.com/apollographql/apollo-link-rest/issues/200#issuecomment -509287597
Si lo averigua, tal vez deberíamos escribir una sección de documentación sobre cómo hacer esto.
¡Muchas gracias @fbartho!
Ese problema ayudó a resolver el problema, los cambios clave que tuve que hacer fueron agregar el método de codificación de archivos a bodySerializers
bodySerializers: {
fileEncode: (data: any, headers: Headers) => {
const formData = new FormData()
formData.append('file', data, data.name)
headers.set('Accept', '*/*')
return { body: formData, headers }
}
}
Y también la parte donde especificas el serializador en la consulta
@rest(
type: "File"
path: "YOUR_API_URL"
method: "POST"
bodySerializer: "fileEncode"
) {
Sería muy útil si algo como esto estuviera en los documentos. ¡Gracias de nuevo!