Tengo un problema extraño que no puedo descifrar. Mi escenario es que capturo una imagen de la cámara y la muestro en la página web para que alguien la vea. Si les gusta, presionan cargar y lo pasa al backend para guardarlo.
Aquí está la pila - nodo en ambos lados:
// Need to convert the dataURL in the canvas element to a File object for uploading function dataURLtoFile(dataUrl: string, fileName: string): File { var arr = dataUrl.split(","); var first_arr = arr[0] var match_arr = first_arr?.match(/:(.*?);/); var mime = 'image/png' if ((match_arr) && (match_arr?.length > 0)) { mime = match_arr[1]; } var bstr = atob(arr[1]); var n = bstr.length; var u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new File([u8arr], fileName, { type: mime }); } // Cut out some elements to make it cleaner function submitInfo() { let formData = new FormData(); const imageDataUrl = (document?.getElementById("canvas_image") as HTMLCanvasElement).toDataURL(); const objectPicture = dataURLtoFile(imageDataUrl, uuid()); formData.append('objectPicture', objectPicture); axios.post("/api/upload", formData); } app.post("/api/upload", async (req, res) => { let form = new formidable.IncomingForm(); var metadataFile = null; var objectPicture = null; await form.parse(req, function (err, fields, files) { // The name for our upload includes a prefix we can use to identify our files later const uploadName = [uuid() + "." + mime.extension(files.objectPicture.mimetype), ].join("|"); var objectPicture = new File( fs.readFileSync(files.objectPicture.filepath, 'utf8'), uploadName, { type: files.objectPicture.mimetype, } ); }); });Así que no hay mucho allí, pero cuando miro el archivo, en comparación con el original, son solo dígitos (en comparación con lo que supongo que es la codificación adecuada). ¿En qué me equivoqué?
Editar: actualicé readFileSync con 'utf8' y sin cambios :( Además, miré el archivo temporal en el disco que se guardó formidablemente, y se ve bien. ¡Entonces hay algo en mi código que lo lee de nuevo que parece estar estropeándolo!