Uploading base64 encoded Image to Amazon S3 via Node.js Uploading base64 encoded Image to Amazon S3 via Node.js javascript javascript

Uploading base64 encoded Image to Amazon S3 via Node.js


For people who are still struggling with this issue. Here is the approach I used with native aws-sdk:

var AWS = require('aws-sdk');AWS.config.loadFromPath('./s3_config.json');var s3Bucket = new AWS.S3( { params: {Bucket: 'myBucket'} } );

Inside your router method (ContentType should be set to the content type of the image file):

  buf = Buffer.from(req.body.imageBinary.replace(/^data:image\/\w+;base64,/, ""),'base64')  var data = {    Key: req.body.userId,     Body: buf,    ContentEncoding: 'base64',    ContentType: 'image/jpeg'  };  s3Bucket.putObject(data, function(err, data){      if (err) {         console.log(err);        console.log('Error uploading data: ', data);       } else {        console.log('successfully uploaded the image!');      }  });

s3_config.json file:

{  "accessKeyId":"xxxxxxxxxxxxxxxx",  "secretAccessKey":"xxxxxxxxxxxxxx",  "region":"us-east-1"}


ok, this one is the answer how to save canvas data to file

basically it loos like this in my code

buf = new Buffer(data.dataurl.replace(/^data:image\/\w+;base64,/, ""),'base64')req = knoxClient.put('/images/'+filename, {             'Content-Length': buf.length,             'Content-Type':'image/png'  })req.on('response', (res) ->  if res.statusCode is 200      console.log('saved to %s', req.url)      socket.emit('upload success', imgurl: req.url)  else      console.log('error %d', req.statusCode)  )req.end(buf)


Here's the code from one article I came across, posting below:

const imageUpload = async (base64) => {  const AWS = require('aws-sdk');  const { ACCESS_KEY_ID, SECRET_ACCESS_KEY, AWS_REGION, S3_BUCKET } = process.env;  AWS.config.setPromisesDependency(require('bluebird'));  AWS.config.update({ accessKeyId: ACCESS_KEY_ID, secretAccessKey: SECRET_ACCESS_KEY, region: AWS_REGION });  const s3 = new AWS.S3();  const base64Data = new Buffer.from(base64.replace(/^data:image\/\w+;base64,/, ""), 'base64');  const type = base64.split(';')[0].split('/')[1];  const userId = 1;  const params = {    Bucket: S3_BUCKET,    Key: `${userId}.${type}`, // type is not required    Body: base64Data,    ACL: 'public-read',    ContentEncoding: 'base64', // required    ContentType: `image/${type}` // required. Notice the back ticks  }  let location = '';  let key = '';  try {    const { Location, Key } = await s3.upload(params).promise();    location = Location;    key = Key;  } catch (error) {  }  console.log(location, key);  return location;}module.exports = imageUpload;

Read more: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property

Credits: https://medium.com/@mayneweb/upload-a-base64-image-data-from-nodejs-to-aws-s3-bucket-6c1bd945420f