如何在上传前调整图像大小

时间:2016-05-24 11:27:34

标签: javascript node.js amazon-s3 image-uploading image-resizing

我想在将图像上传到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);
  });

2 个答案:

答案 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.
   });
});