我想使用S3,elastic-transcoder和lambda功能上传和编码视频文件。
Lambda函数和设置工作正常,但是当我上传视频文件(mp4)时,它会自动“多部分”上传(因为它大于5mb)。 也许正因为如此,弹性转码器的作业流程运行了三次。因此,我必须在每次上传时运行两次不必要的工作(第一个工作成功编码视频文件)。
有没有办法避免这种情况,例如强制上传较大的文件(约60mb)不使用'multipart'而是'put'功能?我宁愿从浏览器控制台为非工程师做这项工作。
这是为ElasticTranscoder提交作业的lambda函数。当我上传视频文件时,'put'不起作用,但'multipart'事件有效。 'put'事件适用于较小的文件,如images或txt,仅用于测试。
console.log('Loading event');
var aws = require('aws-sdk');
var s3 = new aws.S3({apiVersion: '2006-03-01'});
var ets = new aws.ElasticTranscoder({apiVersion: '2012-09-25', region: 'us-west-2'});
exports.handler = function(event, context) {
console.log('Received event:');
console.log(JSON.stringify(event, null, ' '));
var bucket = event.Records[0].s3.bucket.name;
var key = event.Records[0].s3.object.key;
var fileName = key.split('.')[0];
s3.getObject({Bucket:bucket, Key:key},
function(err,data) {
if (err) {
console.log('error getting object ' + key + ' from bucket ' + bucket +
'. Make sure they exist and your bucket is in the same region as this function.');
context.done('error','error getting file'+err);
} else {
console.log("### JOB KEY ### " + key);
ets.createJob({
PipelineId: '***',
Input: {
Key: key,
FrameRate: 'auto',
Resolution: 'auto',
AspectRatio: 'auto',
Interlaced: 'auto',
Container: 'auto',
},
Output: {
Key: fileName + '.m3u8',
ThumbnailPattern: fileName + '-thumbs-{count}',
PresetId: '1351620000001-200035',
Rotate: 'auto'
}
}, function(error, data) {
if(error) {
console.log(error);
} else {
console.log('Job submitted');
}
});
}
}
);
};