Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.16 KB | None | 0 0
  1. var async = require('async');
  2. var AWS = require('aws-sdk');
  3. var gm = require('gm').subClass({imageMagick: true});
  4. var util = require('util');
  5.  
  6. var MAX_WIDTH = 100;
  7. var MAX_HEIGTH = 100;
  8.  
  9. var s3 = new AWS.S3();
  10.  
  11. exports.handler = function(event, context, callback){
  12. console.log("Reading options from event:\n", util.inspect(event, {depth: 5}));
  13. var srcBucket = event.Records[0].s3.bucket.name;
  14. var srcKey = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " "));
  15. var dstBucket = process.env.TARGET_BUCKET;
  16. var dstKey = "resized-" + srcKey;
  17.  
  18. if(srcBucket == dstBucket){
  19. callback("Source and destination buckets are the same.");
  20. return;
  21. }
  22.  
  23. var typeMatch = srcKey.match(/\.([^.]*)$/);
  24. if(!typeMatch){
  25. callback("Could not determine the image type.");
  26. return;
  27. }
  28. var imageType = typeMatch[1];
  29. if(imageType != "jpg" && imageType != "png"){
  30. callback("Unsupported image type: ${imageType}");
  31. return;
  32. }
  33.  
  34. async.waterfall([
  35. function download(next){
  36. s3.getObject({
  37. Bucket: srcBucket,
  38. Key: srcKey
  39. },
  40. next);
  41. },
  42. function transform(response, next){
  43. gm(response.Body).size(function(err, size){
  44. var scalingFactor = Math.min(
  45. MAX_WIDTH / size.width,
  46. MAX_HEIGTH / size.height
  47. );
  48. var width = scalingFactor * size.width;
  49. var height = scalingFactor * size.height;
  50.  
  51. this.resize(width, height).toBuffer(imageType, function(err, buffer){
  52. next(null, response.ContentType, buffer);
  53. }
  54. });
  55. });
  56. },
  57. function upload(contentType, data, next){
  58. s3.putObject({
  59. Bucket: dstBucket,
  60. Key: dstKey,
  61. Body: data,
  62. ContentType: contentType
  63. },
  64. next);
  65. }
  66. ], function(err){
  67. if(err){
  68. console.error(
  69. "Unable to resize " + srcBucket + "/" + srcKey +
  70. " and upload to " + dstBucket + "/" + dstKey +
  71. " due to an error:" + err
  72. );
  73. }else{
  74. console.log(
  75. "Successfully resized " +srcBucket + "/" + srcKey +
  76. " and uploaded to " + dstBucket + "/" + dstKey
  77. );
  78. }
  79.  
  80. callback(null, "message");
  81. });
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement