Невозможно загрузить видео S3 внутри функции Lambda (Node JS) - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь загрузить видеофайл с S3 внутри функции Lambda.Идея состоит в том, что всякий раз, когда видеофайлы загружаются в корзину S3, запускается лямбда-функция.В лямбда-функции я загружаю видеофайл и сохраняю его / tmp / storage.

Вот мой код,

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"]);
  });
};

Но я не получаю никаких ошибок при выполнении этой лямбда-функции,Но когда я проверяю размер файла , он дает 0 .Я понятия не имею, как это решить.После загрузки этого файла в хранилище лямбда-тмп я должен конвертировать этот видеофайл в аудиофайлПоэтому, пожалуйста, помогите мне найти решение.

Спасибо,

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Вызов writeFile является асинхронным, т. Е. Функция немедленно «заканчивается», и выполнение программы продолжается с вызовом statSync.Замените его на writeFileSync.

0 голосов
/ 03 февраля 2019

Код выполняется асинхронно, console.log для размера файла, выполняемого до завершения writeFile.Вам нужно поместить statSync внутри writeFile обратного вызова:

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);
});
...