【问题标题】:s3 object metadata lambda functions3 对象元数据 lambda 函数
【发布时间】:2018-01-08 22:47:10
【问题描述】:

我是 javascript 新手,我正在尝试编写一个 lambda 函数,该函数将由存储桶中的 PUT 事件触发,该函数会将 s3 对象上的文件名和一些元数据字段写入 dynamodb 表。我已经解决了大部分问题,但我坚持抓取 x-amz-meta 标头信息并将变量传递给 dynamo.put 参数。谁能告诉我我的代码做错了什么?谢谢!

var AWS = require('aws-sdk');
var dynamo = new AWS.DynamoDB.DocumentClient({region: 'us-east-1'});
var s3 = new AWS.S3();
//specify the parameters from event to write to specified db table
exports.handler = function(event, context, callback) {
  var srcKey = unescape(event.Records[0].s3.object.key);
  var srcEtag = unescape(event.Records[0].s3.object.eTag);
  var scrUploadTime = unescape(event.Records[0].eventTime);
  var bucket= unescape(event.Records[0].s3.bucket.name);
  var checksum =

      s3.headObject(
        {
            Bucket: bucket,
            Key: srcKey
        },
        function(err, data)
        {
            if (err)
            {
                console.log(err);
                context.done('Error', 'Error getting s3 object: ' + err);
            }
            else
            {
                 return console.log(this.httpResponse.headers['x-amz-meta-checksum']);
            }
        });

    var params = {  
        Item: {
            filename: srcKey,
            uploadtime: scrUploadTime,
            client_checksum : checksum
        },
        TableName: 'S3_log'
        };

//write to dynammodb
dynamo.put(params, function(err, data){
        if (err) {
            callback(err, null);
        }else{
            callback(null, data);
        }
    });
};

【问题讨论】:

  • 这是什么“返回 console.log(this.httpResponse.headers['x-amz-meta-checksum']);”输出?究竟是什么问题?
  • @Calvin 你有没有得到这个工作?如果是这样,您能否通过减轻答案来帮助我们其他人?

标签: javascript amazon-web-services amazon-s3 aws-lambda


【解决方案1】:

看起来你想要这个:

console.log(data.Metadata['x-amz-meta-checksum']);

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#headObject-property

另外,请注意您的代码结构似乎不正确。 s3.headObject 是异步的,因此您的代码在 s3.headObject 返回之前继续在 var params = ... 处执行。下一个动作可能应该在回调内部或以其他方式处理(瀑布、承诺等)以延迟下一个动作直到该动作完成。

【讨论】:

    猜你喜欢
    • 2021-06-09
    • 1970-01-01
    • 2018-09-21
    • 2018-09-20
    • 2020-04-30
    • 2021-09-07
    • 2017-02-21
    • 2017-07-24
    • 1970-01-01
    相关资源
    最近更新 更多