Estoy tratando de agregar un texto de etiqueta en el objeto de archivo, pero al cargar en node.js a través de express-fileupload. Está cargando el archivo pero falta la etiqueta.
const [files, setFiles] = useState([]); const imageLabelChanger = (index, e) => { const value = e.target.value; //insert label and value for specifix image by index files[index].file.label = value; setFiles(files); }; const FD = new FormData(); const createProduct = (e) => { e.preventDefault(); for (let i in files) { FD.append("productImageArray", files[i].file); } dispatch(addProductImage(paramId, FD)); };Con este código obtengo el objeto de archivos.
consola.log(archivos)
output: [ { "id": 7, valid: true, "file": File{ label: "oxygen blue", lastModified: 1642222607314, lastModifiedDate: Sat Jan 15 2022 10:26:47 GMT+0530 (India Standard Time) {}, name: "galaxy-8.jpeg", size: 8433, type: "image/jpeg", }, { "id": 8, valid: true, "file": File{ lastModified: 1642222607314, lastModifiedDate: Sat Jan 15 2022 10: 26: 47 GMT+0530(India Standard Time) {}, name: "galaxy-9.jpeg", size: 9458, type: "image/jpeg", } ]Después de cargar el archivo, obtengo el objeto del archivo pero no obtengo el objeto de los archivos reales que envié usando formData, la clave de etiqueta y falta su valor
console.log(req.files.productImages)
output: [ { lastModified: 1642222607314, lastModifiedDate: Sat Jan 15 2022 10:26:47 GMT+0530 (India Standard Time) {}, name: "galaxy-8.jpeg", size: 8433, type: "image/jpeg", data: Binary('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7...', 0) }, { lastModified: 1642222607314, lastModifiedDate: Sat Jan 15 2022 10: 26: 47 GMT+0530(India Standard Time) {}, name: "galaxy-9.jpeg", size: 9458, type: "image/jpeg", data: Binary('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7...', 0) } ]Por favor, ayúdenme, ¿cómo puedo hacer esas cosas? Creo que este problema es con req.files, puede ser que no requiera ninguna propiedad adicional, así que si hay alguna forma de lograrlo.
Adelanto gracias
No estoy seguro de si esto es aplicable a su situación, pero generalmente adjunto un objeto 'cuerpo' con los detalles adicionales cuando envío archivos. Algo como esto:
const [files, setFiles] = useState([]); const imageLabelChanger = (index, e) => { const value = e.target.value; //insert label and value for specifix image by index files[index].file.label = value; setFiles(files); }; const FD = new FormData(); const createProduct = (e) => { e.preventDefault(); for (let i in files) { FD.append("productImageArray", files[i].file); FD.append("productImageArrayLabels", files[i].file.label); // Add another property to the formData here } dispatch(addProductImage(paramId, FD)); };De esa forma, tendría un objeto de archivos y un objeto de cuerpo en el servidor: