I want to crop an image into various sizes and upload them to AWS S3. Cropping sizes are stored in an array.
I am using async
waterfall and series
method to achieve this.
async.each(crop_sizes,function (result,cb) {
async.waterfall([
/*
* Crop the images to specific size
*/
function (callback) {
gm(path)
.resize(result.width,result.height,'^')
.stream(function (err,buffer) {
console.log('cropped')
callback(null,{'buffer':buffer,'filename':filename,'s3':s3});
});
},
function (output,callback) {
var params ={
Bucket:'mybucket',
Key:'artwork-croppedimages/'+result.folder+output.filename,
Body:output.buffer
}
var options ={
partSize: 5242880, queueSize: 1
};
s3.upload(params,options,function(err, data) {
console.log("upload");
callback();
});
}
],function (err,result) {
console.log("one iteration completed");
cb();
});
},function (err,result) {
console.log("All upload complete");
});
This is how the code should execute:
Repeat steps 1 and 2 in async.each
.
Crop the image.
Upload the cropped image to AWS S3.
But it fails while uploading large sized images. This is the output I get:
cropped
cropped
cropped
cropped
cropped
cropped
cropped
cropped
cropped
cropped
cropped
cropped
upload
one iteration completed
upload
one iteration completed
upload
one iteration completed
upload
one iteration completed
upload
one iteration completed
upload
one iteration completed
upload
one iteration completed
upload
one iteration completed
upload
one iteration completed
upload
one iteration completed
upload
one iteration completed
upload
one iteration completed
All upload complete
Expected output:
cropped
upload
one iteration completed
cropped
upload
one iteration completed
.....
All upload complete