github.com/iron-io/functions@v0.0.0-20180820112432-d59d7d1c40b2/examples/s3/example.js (about)

     1  var im = require('imagemagick');
     2  var fs = require('fs');
     3  var AWS = require('aws-sdk');
     4  
     5  // cb(err, resized) is called with true if resized.
     6  function resizeIfRequired(err, features, fileSrc, fileDst, cb) {
     7    if (err) {
     8      cb(err, false);
     9      return;
    10    }
    11  
    12    var targetWidth = 1024;
    13    if (features.width > targetWidth)
    14    {
    15      im.resize({
    16        srcPath : fileSrc,
    17        dstPath : fileDst,
    18        width : targetWidth,
    19        format: 'jpg'
    20      }, function(err) {
    21        if (err) {
    22          cb(err, false);
    23        } else {
    24          cb(null, true);
    25        }
    26      });
    27    } else {
    28      cb(null, false);
    29    }
    30  }
    31  
    32  exports.run = function(event, context) {
    33    var bucketName = event['bucket']
    34    var srcImageKey = event['srcKey']
    35    var dstImageKey = event['dstKey']
    36  
    37    var s3 = new AWS.S3();
    38  
    39    s3.getObject({
    40        Bucket: bucketName,
    41        Key: srcImageKey
    42      }, function (err, data) {
    43  
    44      if (err) throw err;
    45  
    46      var fileSrc = '/tmp/image-src.dat';
    47      var fileDst = '/tmp/image-dst.dat'
    48      fs.writeFileSync(fileSrc, data.Body)
    49  
    50      im.identify(fileSrc, function(err, features) {
    51        resizeIfRequired(err, features, fileSrc, fileDst, function(err, resized) {
    52          if (err) throw err;
    53          if (resized) {
    54            s3.putObject({
    55              Bucket:bucketName,
    56              Key: dstImageKey,
    57              Body: fs.createReadStream(fileDst),
    58              ContentType: 'image/jpeg',
    59              ACL: 'public-read',
    60            }, function (err, data) {
    61              if (err) throw err;
    62              context.succeed("Image updated");
    63            });
    64          } else {
    65            context.succeed("Image not updated");
    66          }
    67        });
    68      });
    69    });
    70  }