Necesito leer una imagen almacenada localmente, incrustar la imagen en un formulario con datos de formulario usando la especificación de solicitud de varias partes GraphQL, luego realizar una solicitud POST a un servidor graphql con el cuerpo de la solicitud como los datos del formulario en sí.
Leo la imagen usando fs.readFile y uso los datos como un argumento para mi función de publicación de datos:
fs.readFile('./location/to/image/image.jpg', (err, data) => { if (err) { throw (err); } postData(data); });Mi función postData es la siguiente:
function postData(readable) { /** Create form data */ const requestBody = new FormData(); /** Define the query */ const sdl = ` mutation ($image: Upload!) { testUpload(image: $image){ code success message } } `; /** Follow instructions according to graphql multipart request specification * https://github.com/jaydenseric/graphql-multipart-request-spec */ requestBody.append( 'operations', JSON.stringify({ query: sdl, variables: { image: null }, }) ); requestBody.append( 'map', JSON.stringify({ 0: ['variables.image'], }) ); requestBody.append('0', readable); /** Submit the form */ return new Promise((resolve, reject) => { requestBody.submit('http://localhost:4000/api/graphql', (err, res) => { if (err) { console.error(err); reject(err); } else { let body = ''; res.on('readable', () => { body += res.read(); }); res.on('end', () => { resolve(JSON.parse(body)); }); } }); }); }Lo que sucede es que accedí con éxito a mi API y a mi resolución, pero el tipo MIME del archivo se recibe como application/octet-stream.
Supongo que no estoy leyendo los datos correctamente, o algo completamente diferente.
Realmente agradecería cualquier ayuda. Gracias.