我想在将图像上传到s3亚马逊之前调整图片大小。 我需要3种不同的尺寸:调整大小(原始图像,缩略图,网页大小)。 我怎样才能做到这一点? 如何使用方法POST获取过去的图像路径?
这是我的代码:(使用节点js将图像上传到s3亚马逊)
app.post('/upload', function(request, response) {
var ext
, hash
, form = new formidable.IncomingForm()
, files = []
, fields = [];
form.keepExtensions = true;
form.uploadDir = 'tmp';
form.on('fileBegin', function(name, file) {
ext = file.path.split('.')[1];
hash = hasher();
file.path = form.uploadDir + '/' + hash;
});
form.on('field', function(field, value) {
fields.push([field, value]);
}).on('file', function(field, file) {
files.push([field, file]);
}).on('end', function() {
fs.readFile(__dirname + '/../tmp/' + hash, function(error, buf) {
var req = client.put('/images/' + hash + '.png', {
'x-amz-acl': 'private',
'Content-Length': buf.length,
'Content-Type': 'image/png'
});
req.on('response', function(res){
var image = new S3({
hash : hash,
url : req.url
});
image.save(function(error, result) {
if (error) {
console.error(error);
} else {
response.redirect('http://' + request.headers.host + '/' + hash);
};
})
});
req.end(buf);
});
});
form.parse(request);
});
答案 0 :(得分:0)
使用graphicsmagick,imagemagick。还有 gm 模块。 Link
实施例:
gm(buf)
.resize(100, 100)
.toBuffer('PNG',function (err, buffer) {
if (err) return handle(err);
console.log('done!');
upload(buffer,function(err){
if(!err)
console.log("uploaded")
}
}) //use buffer for upload
function upload(buffer,callback){
s3bucket = new AWS.S3();
params={
Bucket: bucketName,
Key: folder + '/' + fileName,
Body: buffer,
ACL: 'public-read'
}
s3bucket.putObject(params,function(err)....
}
答案 1 :(得分:0)
HTML组件:
*<*input type="file" class="hidden" id="logoFile">// remove *
JAVASCRIPT:
file = document.getElementById('logoFile').files[0];
image = new Parse.File("image.jpg", file); // I am using Parse. You can use other Node.js modules.
您可以根据自己的意愿设置尺寸。
试试这个:
image.resize(200, 200, function(err, image){
// encode resized image to jpeg and get a Buffer object
image.toBuffer('jpg', function(err, buffer){
// save buffer to disk / send over network / etc.
});
});