Upload base64 encoded data

49 Views Asked by At

I want to insert base64 encoded data of an image(input) into the DB, but the data that is being returned is not right.

Current output:UGVyc2lzdGVudEZpbGU6IGY1OWY0ZmQzZTFiM2ExMWU0MTYxM2JiMDAuanBnLCBPcmlnaW5hbDogcHJvZmlsZS1waWMuanBnLCBQYXRoOiBDOlxVc2Vyc1xBbnVyYWdcQXBwRGF0YVxMb2NhbFxUZW1wXGY1OWY0ZmQzZTFiM2ExMWU0MTYxM2JiMDAuanBn

Expected output: /9j/4AAQSkZJRgABAQAASABIAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABIAAAAAQAAAEgAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAB4CgAwAEAAAAAQAABDgAAAAA/+0AOFBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAAAAOEJJTQQlAAAAAAAQ1B2M2Y8AsgTpgAmY7PhCfv/AABEIBDgHgAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/...

I'm using formidable to upload files and converting the data to base64 using btoa() and Buffer.from(data, 'base64')

Upload API:

const formidableOptions = {
  // uploadDir: path.join(__dirname, "..", "avatar"),
  keepExtensions: true,
  maxFileSize: 1 * 1024 * 1024,
};

router.post("/users/me/avatar", auth, async (req, res) => {
  const form = new formidable.IncomingForm(formidableOptions);
  form.onPart = (part) => {
    if (!fileExtensionRegex.test(part.mimetype)) {
      form._error(new Error("Invalid file type"));
    } else {
     // part.on('file',(data)=>{
     //   console.log(btoa(data)
     // })
      form._handlePart(part);
    }

  };

  form.parse(req, async (err, fields, files) => {
    if (err) {
      return res.status(500).send({ error: err.message });
    }
    for (const file in files) {
      // console.log(Buffer.from(files[file], "base64").toString("base64"));
      //Output when Buffer.from() is used: AA==
      console.log(btoa(files[file]));
      req.user.avatar = btoa(files[file]);
      await req.user.save();
    }
    res.send("Avatar uploaded successfully");
  });
});
0

There are 0 best solutions below