Estoy tratando de convertir el siguiente código que usa el módulo de solicitud en el módulo axios para enviar la solicitud POST.
solicitar el código del módulo:
const imageFile = fs.createReadStream('image.jpeg'); const imgName = "image" + ".jpeg"; var options = { 'method': 'POST', 'url': url, 'headers': { 'Content-Type': 'application/json', 'Cache-Control': 'no-cache', 'Accept': 'application/json' }, formData: { 'image': { 'value': imageFile, 'options': { 'filename': imgName, 'contentType': null } } } }; request(options, function (error, response) { if (error) throw new Error(error); console.log("SUCCESS"); });El código anterior funciona bien y la imagen se publica correctamente con el módulo de solicitud. Pero cuando convierto lo mismo a axios, obtengo un error 500. ( AxiosError: la solicitud falló con el código de estado 500 )
código del módulo axios:
const FormData = require('form-data') const imageFile = fs.createReadStream('image.jpeg'); const imgName = "image" + ".jpeg"; const bodyFormData = new FormData(); bodyFormData.append("image['value']", imageFile); bodyFormData.append("image['options']['filename']", imgName) // bodyFormData.append("image['options']['contentType']", null) console.log(bodyFormData) const formHeaders = bodyFormData.getHeaders(); axios.post(url, bodyFormData, { headers: { ...formHeaders, 'Cache-Control': 'no-cache', 'Accept': 'application/json', } }).then(function (response) { console.log('SUCCESS'); }).catch(function (error) { throw new Error(error); });¿Alguien puede averiguar qué estoy haciendo mal aquí?
¿Hay alguna otra forma de publicar la imagen usando axios que no sea usar datos de formulario?
Consulte la documentación de FormData#append() . Puede proporcionar datos adicionales como el nombre del archivo como tercer parámetro de opciones
const bodyFormData = new FormData(); // Pass filename as a string bodyFormData.append("image", imageFile, imgName); // or to specify more meta-data, pass an object bodyFormData.append("image", imageFile, { filename: imgName, contentType: "image/jpeg", }); axios.post(url, bodyFormData, { headers: { Accept: "application/json", "Cache-Control": "no-cache", ...bodyFormData.getHeaders(), }, }); Debajo del capó, request() hace algo muy similar con exactamente la misma biblioteca form-data . Versolicitud.js