s3-imageresizer
Version:
Get image buffer from url,Resize image using buffer/url, upload image buffer to s3,
95 lines (91 loc) • 2.25 kB
JavaScript
var request = require("request").defaults({ encoding: null });
var fs = require("fs");
var fileType = require("file-type");
var sharp = require("sharp");
var AWS = require("aws-sdk");
exports.getImageInBufferFromUrl = function(url) {
var image = {};
return new Promise(function(resolve, reject) {
request.get(url, function(err, res, body) {
if (err) {
reject(err);
}
image.buffer = body;
image.name = url.split("/")[url.split("/").length - 1];
resolve(image);
});
});
};
exports.resizeImageFromBuffer = function(buffer, width, height) {
return new Promise(function(resolve, reject) {
sharp(buffer)
.resize(width, height, { kernel: sharp.kernel.nearest })
.toBuffer()
.then(function(resizedBuffer) {
resolve(resizedBuffer);
})
.catch(function(error) {
reject(error);
});
});
};
exports.uploadBufferToS3 = function(
fileStream,
accessKeyId,
secretAccessKey,
bucketName,
path = null,
imageName
) {
let s3client = new AWS.S3({
accessKeyId: accessKeyId,
secretAccessKey: secretAccessKey,
params: {
Bucket: bucketName,
Key: path
}
});
var imgtype = fileType(fileStream);
var imgName = imageName;
if (path) {
imgName = `${path}/${imageName}`;
}
return new Promise(function(resolve, reject) {
s3client.upload(
{
ACL: "public-read",
ContentType: imgtype.mime,
Body: fileStream,
Key: imgName
},
function(err, result) {
if (err) {
reject(err);
} else {
resolve(result);
}
}
);
});
};
exports.resizeImageFromUrl = function(url, width, height) {
let image = {};
return new Promise(function(resolve, reject) {
request.get(url, function(err, res, body) {
if (err) {
reject(err);
}
sharp(body)
.resize(width, height, { kernel: sharp.kernel.nearest })
.toBuffer()
.then(function(resizedBuffer) {
image.buffer = resizedBuffer;
image.name = url.split("/")[url.split("/").length - 1];
resolve(image);
})
.catch(function(error) {
reject(error);
});
});
});
};