Guest User

Untitled

a guest
Apr 26th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.11 KB | None | 0 0
  1. const im = require('imagemagick');
  2. const fs = require('fs');
  3. const AWS = require('aws-sdk');
  4. const s3 = new AWS.S3();
  5.  
  6. exports.handler = async (event) => {
  7. const operation = event.queryStringParameters ? event.queryStringParameters.operation : null;
  8. let data = JSON.parse(event.body);
  9. switch (operation) {
  10. case 'ping':
  11. return sendRes(200, 'pong');
  12. case 'convert':
  13. return await operate(data);
  14. default:
  15. return sendRes(401, `Unrecognized operation "${operation}"`);
  16. }
  17. };
  18.  
  19. const sendRes = (status, body) => {
  20. var response = {
  21. statusCode: status,
  22. headers: {
  23. "Content-Type": "text/html"
  24. },
  25. body: body
  26. };
  27. return response;
  28. }
  29.  
  30. const operate = async (body) => {
  31. const customArgs = body.customArgs.split(',') || [];
  32. let outputExtension = 'png';
  33. let inputFile = null, outputFile = null;
  34.  
  35. try {
  36. if (body.base64Image) {
  37. inputFile = '/tmp/inputFile.png';
  38. const buffer = new Buffer(body.base64Image, 'base64');
  39. fs.writeFileSync(inputFile, buffer);
  40. customArgs.unshift(inputFile); // customArgs should be like [inputFile, options, outputfile]
  41. }
  42.  
  43. outputFile = `/tmp/outputFile.${outputExtension}`;
  44. customArgs.push(outputFile);
  45.  
  46. await performConvert(customArgs);
  47. let fileBuffer = new Buffer(fs.readFileSync(outputFile));
  48. fs.unlinkSync(outputFile);
  49.  
  50. await putfile(fileBuffer); // upload file to s3
  51. return sendRes(200, '<img src="data:image/png;base64,' + fileBuffer.toString('base64') + '"//>');
  52. } catch (e) {
  53. console.log(`Error:${e}`);
  54. return sendRes(500, e);
  55. }
  56. }
  57.  
  58. const performConvert = (params) => {
  59. return new Promise(function (res, rej) {
  60. im.convert(params, (err) => {
  61. if (err) {
  62. console.log(`Error${err}`);
  63. rej(err);
  64. } else {
  65. res('operation completed successfully');
  66. }
  67. });
  68. });
  69. }
  70.  
  71. const putfile = async (buffer) => {
  72. let params = {
  73. Bucket: 'foobucketlambda',
  74. Key: 'images/' + Date.now().toString() + '.png',
  75. Body: buffer
  76. };
  77. return await s3.putObject(params).promise();
  78. }
Add Comment
Please, Sign In to add comment