将多个文件上载到Amazon S3

I need help on how to upload multiple files on Amazon S3. So basically I have three input fields for files upload, two inputs will take 10-20 pictures and last input is only one for one image and upload them to Amazon S3 when a form is submitted.

The form that I'm using for uploading images:

enter image description here

I have a bucket and everything, what I need is some kind of solution to upload multiple images to Amazon S3.

I'm using PHP as my backend and for now, images are stored on hosting when a form is submitted. But I will have more then 150gb of images uploaded every month and I need S3 for hosting those images.

When I connect the form with Amazon S3 and try to upload more than one image, I get this message "POST requires exactly one file upload per request.".

S3 is highly scalable and distributed storage.

If you have those images locally in your machine you can simply use

aws s3 sync local_folder s3://bucket_name/

https://docs.aws.amazon.com/cli/latest/reference/s3/sync.html

cli takes cares of syncing the data.

You can also configure how much parallelism you want on the cli with the configuration settings.

https://docs.aws.amazon.com/cli/latest/topic/s3-config.html

You can also do this programmatically if that is going to be a continuous data movement.

EDIT1:

Only one file can be uploaded from the UI at one time.

You can sequence them via javascript and upload one at a time.

If you want to take it to the backend you can do so,

https://w3lessons.info/2013/09/06/jquery-multiple-file-upload-to-amazon-s3-using-php/

Hope it helps.

Here is the NodeJS code which will give you a idead about uploading all the files and then send the response back to the UI when the upload is completed.

I am using promises here, and promise.all() method which will resolve all the promises.

Here I am used multer module for Node.JS which helped me to handle the files that I received from the UI

app.post('/uploadMultipleFiles',upload.array('file', 10),function(req,res){
        var promises=[];
        for(var i=0;i<req.files.length;i++){
            var file = req.files[i];
            promises.push(uploadLoadToS3(file));
        }
        Promise.all(promises).then(function(data){
            res.send('Uploadedd');
        }).catch(function(err){
            res.send(err.stack);
        }) 
    })

    function uploadLoadToS3(ObjFile){

        var params={
            ACL :'public-read',
            Body : new Buffer(ObjFile.buffer),
            Bucket:'ascendon1',
            ContentType:ObjFile.mimetype,
            Key:ObjFile.originalname
        }
        return s3.upload(params).promise();
    }