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.
Asked
Active
Viewed 1.7k times
5
-
1Maybe use `atob()` ? [Source](https://www.npmjs.com/package/atob) – KALALEX May 31 '18 at 12:06
-
Both top answers helped me: https://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript – Robin Wieruch Feb 12 '20 at 08:29
4 Answers
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:
-
(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