使用非多部分将较大的文件上传到S3但是上传

时间:2015-04-03 12:01:08

标签: file-upload amazon-web-services amazon-s3

我想使用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');
            }
        });
    }
  }
);

};

0 个答案:

没有答案