无法下载lambda函数内部S3视频(节点JS)

问题描述 投票:0回答:2

我试图下载从S3 lambda函数内部的视频文件。我们的想法是,只要将视频文件上传到S3桶lambda函数将被触发。在lambda表达式,我下载视频文件,并将其存储的/ tmp /存储。

这里是我的代码,

const fs = require('fs');
const AWS = require('aws-sdk');
const s3 = new AWS.S3();


exports.handler = function (event, context, callback) {
    var params = {
      Bucket: "Bucket_name",
      Key: event.Records[0].s3.object.key
    }
    console.log("key ", event.Records[0].s3.object.key);
    s3.getObject(params, function(err, data){   if (err) {
      console.error(err.code, "-", err.message);
      return callback(err);
    }
    fs.writeFile("/tmp/vid.mp4", data.Body, function(err){
      if(err)
        console.log(err.code, "-", err.message);
      return callback(err);
    });
    var stats = fs.statSync("/tmp/vid.mp4");
    console.log("size of the file ", stats["size"]);
  });
};

不过,虽然在执行此lambda函数,我没有得到任何错误。但是,当我检查文件的大小,它给了0。我没有关于如何解决此问题的想法。拉姆达tmp目录存储下载此文件后,我有这个视频文件转换成音频文件。所以,请帮我找出解决办法。

谢谢,

amazon-web-services amazon-s3 aws-lambda fs
2个回答
0
投票

代码是异步运行,console.log文件尺寸writeFile之前完成执行。你需要把statSyncwriteFile回调中:

fs.writeFile("/tmp/vid.mp4", data.Body, function(err){
  if(err) console.log(err.code, "-", err.message);

  var stats = fs.statSync("/tmp/vid.mp4");
  console.log("size of the file ", stats["size"]); 
  return callback(err);
});

0
投票

writeFile呼叫是异步的,即函数立即“端部”,并且程序执行与statSync呼叫继续。与writeFileSync更换。

© www.soinside.com 2019 - 2024. All rights reserved.