Uploading a File(Multiple) to Amazon Web Services (AWS) S3 Bucket with Node.js in Express

Saloni Malhotra
2 min readMay 30, 2018

--

In Today’s world, we all are familiar with Amazon Web Services(AWS) so i am going to explain how to upload Single/Multiple Images in Node Js using Express.

Step-1

For implementation AWS S3 firstly install dependencies which is Required

$ npm install express
$ npm install body-parser
$ npm install cors
$ npm install multer
$ npm install aws-sdk

Step- 2

Create a Model Folder in your Project directory for implementing AWS S3 in node & In Model folder create a new file I am going to take a filename s3Upload(s3Upload.js).You must take any filename according to you.

Step- 3

Create a server file server.js in your project directory.It is the main file for starting the node server

var express = require('express');
var bodyParser = require('body-parser');
var s3FileUpload = require('./model/s3Upload');
var cors = require('cors');
var app = express();
var port = process.env.PORT || 3000;
app.use(bodyParser.urlencoded({ extended: true }))
app.use(cors());
app.use('/api', s3FileUpload);
// Start the server
app.listen(port,function(err){
if(err){
console.log(" DB Error: ",err);
}else{
console.log('Port connected',port);
}
});

Step - 4

Implementing AWS S3

var express = require('express');
var router = express.Router();
var multer = require('multer');
var AWS = require('aws-sdk');
var storage = multer.memoryStorage({
destination: function(req, file, callback) {
callback(null, '');
}
});
var multipleUpload = multer({ storage: storage }).array('file');
var upload = multer({ storage: storage }).single('file');
const BUCKET_NAME = 'BUCKET_NAME';
const IAM_USER_KEY = 'USER_KEY';
const IAM_USER_SECRET = 'USER_SECRET_KEY';
router.post('/upload',multipleUpload, function (req, res) {
const file = req.files;
let s3bucket = new AWS.S3({
accessKeyId: IAM_USER_KEY,
secretAccessKey: IAM_USER_SECRET,
Bucket: 'BUCKET_NAME'
});
s3bucket.createBucket(function () {
let Bucket_Path = 'BUCKET_PATH';
//Where you want to store your file
var ResponseData = [];

file.map((item) => {
var params = {
Bucket: BucketPath,
Key: item.originalname,
Body: item.buffer,
ACL: 'public-read'
};
s3bucket.upload(params, function (err, data) {
if (err) {
res.json({ "error": true, "Message": err});
}else{
ResponseData.push(data);
if(ResponseData.length == file.length){
res.json({ "error": false, "Message": "File Uploaded SuceesFully", Data: ResponseData});
}
}
});
});
});
});
module.exports = router;

Note:- For Single file use upload variable & Instead of map pass Single file in s3bucket.upload Method

var upload = multer({ storage: storage }).single('file');

Hi, My name is Saloni Malhotra. I am a Javascript Developer and writer. I am here to talk so Don’t hesitate to Drop me a message.if you like my story Please Click ❤ and share with everyone.

Thanks !!
Happy coding

--

--

Saloni Malhotra

I write about web development, Answers questions on Quora. Solving people problems using code spells. Web developer, Writer, Thinker.