5

Iam capturing webcam screenshot in reactjs(react-webcam). Screenshot is in the form of base64 encoded string. I am sending the base 64string to nodejs and I want to convert base64 String to .jpeg file, So that I can save in Azure Blob Storage. Is there any method to convert base64 string to .jpeg file.

Rajat Barman
  • 73
  • 1
  • 1
  • 6

4 Answers4

8

You can convert your Base64 string to Buffer and then try storing it to azure.

var base64String = "....."; // your base64 string
var bufferValue = Buffer.from(base64String,"base64");
Ahsan Jamal
  • 218
  • 1
  • 3
  • 17
2

I used this and it worked. below is server side code(NodeJS)

var contentType = 'image/jpeg';
    let base64String=req.body.img;
    let base64Image = base64String.split(';base64,').pop();
    let date=Date.now();
    fs.writeFile(`./uploads/${date}.jpeg`, base64Image, {encoding: 'base64'}, function(err) {
    console.log('File created');
    sourceFilePath= path.resolve(`./uploads/${date}.jpeg`);
   blobName=path.basename(sourceFilePath, path.extname(sourceFilePath));
   //console.log(sourceFilePath);
    blobService.createBlockBlobFromLocalFile(containerName, blobName, sourceFilePath, err => {
            if (err) {
                console.log(err);
            } 
            else {
                //resolve({ message: `Upload of '${blobName}' complete` });
                console.log("UPLOADED")
            }
        });
Rajat Barman
  • 73
  • 1
  • 1
  • 6
-1

Try this:

  1. based-blob

    (async function() {
      const b = require('based-blob');
    
      const base64String = 'some base64 data...';
    
      const blob = b.toBlob(base64String);
      const b64s = await b.toBase64(blob);
    
      console.log(b64s == base64String); // true
    })();
    
Harshal Yeole
  • 4,812
  • 1
  • 21
  • 43
-2

Hi i use this function

public b64toBlob = (b64Data: string = '', sliceSize?: number) => {
            sliceSize = sliceSize || 512;
            if ( b64Data !== null) {
                let block = b64Data.split(';');
                let dataType = block[0].split(':')[1];
                let realData = block[1].split(',')[1];
                let filename = this.makeid() + '.' + dataType.split('/')[1];
                let byteCharacters = atob(realData);
                let byteArrays = [];
                for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
                    let slice = byteCharacters.slice(offset, offset + sliceSize);

                    let byteNumbers = new Array(slice.length);
                    for (let i = 0; i < slice.length; i++) {
                        byteNumbers[i] = slice.charCodeAt(i);
                    }
                    let byteArray = new Uint8Array(byteNumbers);
                    byteArrays.push(byteArray);
                }
                let blob = new Blob(byteArrays, {type: dataType});
                return blob ;
            } else {
                return '';
            }
        }
Edhar Dowbak
  • 2,648
  • 1
  • 10
  • 13