Cal*_*vin 5 javascript amazon-s3 amazon-web-services aws-lambda
我是 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);
}
});
};
Run Code Online (Sandbox Code Playgroud)
看起来你想要这个:
console.log(data.Metadata['x-amz-meta-checksum']);
Run Code Online (Sandbox Code Playgroud)
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#headObject-property
但还要注意,您的代码似乎结构不正确。 是异步的,因此您的代码在返回之前s3.headObject继续执行。下一个操作可能应该在回调内部或以另一种方式处理(瀑布、承诺等),以延迟下一个操作,直到该操作完成。var params = ...s3.headObject
| 归档时间: |
|
| 查看次数: |
3645 次 |
| 最近记录: |