Amazon s3 根据元数据搜索和移动S3 bucket中的文件
我目前有一个设置,将音频文件上载到一个具有用户定义元数据的存储桶中。我的下一个目标是过滤元数据并将文件移动到其他文件夹。目前我有一个lambda函数,可以将音频转换成mp3。因此,我需要帮助调整代码,以便元数据通过编码持久化,并存储在数据库中。以及创建另一个函数来搜索特定的元数据值,并将相应的文件移动到另一个bucketAmazon s3 根据元数据搜索和移动S3 bucket中的文件,amazon-s3,lambda,metadata,Amazon S3,Lambda,Metadata,我目前有一个设置,将音频文件上载到一个具有用户定义元数据的存储桶中。我的下一个目标是过滤元数据并将文件移动到其他文件夹。目前我有一个lambda函数,可以将音频转换成mp3。因此,我需要帮助调整代码,以便元数据通过编码持久化,并存储在数据库中。以及创建另一个函数来搜索特定的元数据值,并将相应的文件移动到另一个bucket 'use strict'; console.log('Loading function'); const aws = require('aws-sdk'); const
'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)
S3不提供搜索元数据的机制
要实现您正在考虑的仅使用本机S3功能的目的,唯一的方法是遍历对象列表,并为每个对象发送
HEAD
请求,但当然,对于大型存储桶来说,这并不能很好地扩展,而且每个请求都要收费,尽管它很小。S3不提供搜索元数据的机制
要实现您正在考虑的仅使用本机S3功能的目的,唯一的方法是遍历对象列表,并为每个对象发送
HEAD
请求,但当然,对于大型存储桶来说,这并不能很好地扩展,而且每个请求都要收费,虽然这是一个小问题。您能澄清一下您的实际问题吗?在您的愿望(移动、检索元数据、存储元数据、搜索元数据)中,您寻求哪一个方面的帮助?你尝试了什么,发生了什么?为了澄清,我可以将元数据存储到音频文件中,并且我知道如何检索它。问题是我如何搜索100个音频文件的元数据,并将它们从一个存储桶移动到另一个存储桶?您能否澄清您的实际问题?在您的愿望(移动、检索元数据、存储元数据、搜索元数据)中,您寻求哪一个方面的帮助?你尝试了什么,发生了什么?为了澄清,我可以将元数据存储到音频文件中,并且我知道如何检索它。问题是我如何搜索100个音频文件的元数据,并将它们从一个存储桶移动到另一个存储桶?