How to upload images to S3 bucket using Nodejs code.

Uploading images to S3 bucket using Nodejs code. The below code will upload any assets to mentioned AWS S3 bucket and return the uploaded details along with assets size in bytes.

const AWS = require('aws-sdk');
const { Storage } = require('@google-cloud/storage');
const dotenv = require("dotenv");
dotenv.config();

const s3 = new AWS.S3({
    accessKeyId: process.env.AWS_ACCESS_ID,
    secretAccessKey: process.env.AWS_SKEY,
});


function sizeOf(key, bucket) {
    return s3.headObject({ Key: key, Bucket: bucket })
        .promise()
        .then(res => res.ContentLength);
}

async function uploadFileToAws(file){
    const fileName = `${new Date().getTime()}_${file.name}`;
    const mimetype = file.mimetype;
    const params = {
            Bucket: process.env.AWS_S3_BUCKET,
            Key: "s3uploader/"+fileName,
            Body: file.data,
            ContentType: mimetype,
            ACL: 'public-read'
        };
        const res = await new Promise((resolve, reject) => {
            s3.upload(params, (err, data) => err == null ? resolve(data) : reject(err));
          });
        let meta = await sizeOf("s3uploader/"+fileName, process.env.AWS_S3_BUCKET)
        const response = {}
        response.statusCode = 200;
        response.body = res;
        response.body['size'] = meta;
        
        response.headers = {
            'Access-Control-Allow-Origin': 'http://localhost:4200',
            'Access-Control-Allow-Credentials': true,
        }
        return response;
}

Leave a Reply

Your email address will not be published. Required fields are marked *