根据元数据在S3存储桶中搜索和移动文件

时间:2016-11-04 20:18:31

标签: amazon-s3 lambda metadata

我目前有一个设置,其中音频文件上传到具有用户定义元数据的存储桶。我的下一个目标是过滤元数据并将文件移动到其他文件夹。目前我有lambda lambda函数将音频转换为mp3。因此,我需要帮助来调整代码,以便元数据通过编码保持不变并存储在数据库中。并创建另一个搜索特定元数据值的函数,并将相应的文件移动到另一个存储桶。

'use strict';

console.log('Loading function');

const aws = require('aws-sdk');

const s3 = new aws.S3({ apiVersion: '2006-03-01' });

const elastictranscoder = new aws.ElasticTranscoder();

// return basename without extension
function basename(path) {
   return path.split('/').reverse()[0].split('.')[0];
}

// return output file name with timestamp and extension
function outputKey(name, ext) {
   return name + '-' + Date.now().toString() + '.' + ext;
}

exports.handler = (event, context, callback) => {
    const bucket = event.Records[0].s3.bucket.name;
       const key = event.Records[0].s3.object.key;

       var params = {
         Input: { 
           Key: key
         },
         PipelineId: '1477166492757-jq7i0s', 
         Outputs: [
           {
             Key: basename(key)+'.mp3',
             PresetId: '1351620000001-300040', // mp3-128
           }
         ]
       };

       elastictranscoder.createJob(params, function(err, data) {
         if (err){
           console.log(err, err.stack); // an error occurred
           context.fail();
           return;
         }
         context.succeed();
       });
};

我也做了一些研究,并且知道元数据应该可以通过

取出
s3.head_object(Bucket=bucket, Key=key)

1 个答案:

答案 0 :(得分:2)

S3没有提供搜索元数据的机制。

执行您仅考虑使用本机S3功能的唯一方法是遍历对象列表并为每个对象发送HEAD请求,但当然这对于大型对象来说不能很好地扩展水桶和每个请求都是收费的,虽然它很小。