Actualmente estoy trabajando en una aplicación con un front-end React Native y un backend Node.js/Express. Soy perfectamente capaz de cargar archivos usando FormData con Content-Type multipart/form-data. El problema que tengo es que cuando uso FormData, cualquier otro dato que desee enviar en el cuerpo de la solicitud se convierte necesariamente en una cadena. Este no es el caso cuando uno simplemente envía un objeto JS como el cuerpo de la solicitud (siempre que lo analice en el backend, por supuesto). Deseo saber si existe una buena práctica para enviar un archivo o archivos junto con JSON en una solicitud, sin perder los tipos de dicho JSON.
Gracias
Agregue sus datos como JSON en un campo de FormData:
const data = { foo: ["bar", 1] }; const file = new File(["some content"], "myfile.txt"); const formdata = new FormData(); formdata.append("file", file); // Send as JSON formdata.append("data", JSON.stringify(data)); const req = new Request("./", { method: "POST", body: formdata }); // simulate server side getting the response req.formData().then( (fd) => { const received_file = fd.get("file"); // parse JSON const received_data = JSON.parse(fd.get("data")); console.log({ received_file, received_data }); });Cuando insiste en enviar la imagen junto con otros datos dentro del JSON, AFAIK su única opción es convertir la imagen a algún tipo de datos que se pueda transmitir a través de JSON.
La opción más obvia sería una cadena, y lo que generalmente se usa aquí es la codificación base64. Sin embargo, no es muy eficiente y puede causar retrasos.
Lo que a veces se hace para permanecer dentro del dominio JSON pero aún poder cargar imágenes es crear dos puntos finales. Uno para los datos JSON. Uno para la subida de imágenes en formato binario.