【问题标题】:convert pdf pages into images using AWS s3 and Lambda使用 AWS s3 和 Lambda 将 pdf 页面转换为图像
【发布时间】:2019-01-08 07:26:10
【问题描述】:

我使用的是节点 8.1, 我想使用 S3 和 lambda 将 PDF 转换为图像,但 CloudWatch 反复给出以下错误: “无法导入模块‘索引’:错误” 以下文件在主项目文件夹中命名为 index.js:

const util = require('util');
const AWS = require('aws-sdk');
const gm = require('gm').subClass({ imageMagick: true });
const s3 = new AWS.S3();

exports.handler = (event, context) => {
  const srcBucket = event.Records[0].s3.bucket.name;
  const srcKey = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " "));

  const dstBucket = srcBucket;
  const dstKey = srcKey.replace('.pdf', '.png');

  s3.getObject({Bucket: srcBucket, Key: srcKey}, (err, response) => {
    if (err) {
      context.done('S3 get object error:', err);
      context.fail(err);
    }

    // conversion start
    gm(response.Body)
      .setFormat("png")
      .resize(200) // you can configure
      .quality(100) // you can configure
      .stream((err, stdout, stderr) => {
        if(err) {
          console.log("gm conversion process error: ");
          console.log(err,stdout,stderr);
          context.fail(err);
        }
        const chunks = [];
        stdout.on('data', (chunk) => {
          chunks.push(chunk);
        });
        stdout.on('end', () => {
          console.log('gm process finished');
          const buffer = Buffer.concat(chunks);

          // Upload start
          const params = {
            Bucket: dstBucket,
            Key: dstKey,
            ContentType: 'image/png',
            Body: buffer
          };
          s3.putObject(params, (err, data) => {
            if (err) {
              console.log("S3 upload error: " + err);
              context.fail(err);
            }
            console.log('S3 upload finished!');
            console.log('Bucket: ' + dstBucket);
            console.log('key: ' + dstKey);
            context.succeed({
              "error":false
            });
          });
        });

        stderr.on('data', (data) => {
          console.log('stderr data: ' +  data);
        });
      });
  });
};

我不太了解 aws-lambda 以及文件转换,这是我唯一遇到的问题并且找不到任何解决问题的方法。

我认为 index.handler 传递函数的方式可能存在一些问题,但我不知道小故障在哪里。

【问题讨论】:

    标签: node.js pdf amazon-s3 aws-lambda imagemagick


    【解决方案1】:

    问题听起来像是您没有正确配置 .yml 文件。

    https://docs.aws.amazon.com/lambda/latest/dg/serverless-deploy-wt.html#serv-deploy(用于 cli 部署)

    https://serverless.com/framework/docs/providers/aws/guide/serverless.yml/(您需要编写的配置文件,以便 aws 知道要导入什么)

    【讨论】:

      【解决方案2】:

      您是否尝试过在本地运行该代码?听起来像是语法错误。

      无论如何,我只创建了这个功能,它可以在 fit hub 上找到:

      https://github.com/rcastoro/PDFImagine

      您可以从下面的视频中看到,它在 s3 存储桶中获取 PDF,并使用 aws 事件通知 lambda 函数将新的 PDF 转换为图像。

      https://youtu.be/yU-jA2_5Tvs

      【讨论】:

        猜你喜欢
        • 2017-01-05
        • 1970-01-01
        • 2015-08-12
        • 1970-01-01
        • 2015-09-18
        • 2012-04-24
        • 2012-12-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多