Загрузка аудиофайла с помощью Node.js Streams в AWS Lambda - PullRequest
0 голосов
/ 19 сентября 2018

Итак, я пытаюсь извлечь аудиофайл в формате mp3 (приблизительно 9 МБ) из s3, передать данные в поток записи, а затем загрузить их в другое место назначения s3, используя readStream из файла / tmp /.Это лямбда-функция, которая получает событие загрузки s3 и пытается записать данные из созданного объекта в другое ведро.

const fs = require('fs');
const AWS = require('aws-sdk');

const s3 = new AWS.S3();

exports.handler = (event, context, callback) => {
    var sourceBucket = event.Records[0].s3.bucket.name;
    var sourceKey = event.Records[0].s3.object.key;

    var getParams = {
        Bucket: sourceBucket,
        Key: sourceKey
    };

    const inputFilename = '/tmp/' + sourceKey;

    //writing and reading streams
    const writeStream = fs.createWriteStream(inputFilename);
    s3.getObject(getParams).createReadStream().pipe(writeStream);

    var putParams = {
        Body: fs.createReadStream(inputFilename),
        Bucket: "example-destination-bucket",
        Key: 'transfer-' + sourceKey        
    };

    s3.upload(putParams, function(err, data) {
        if (err) console.log(err, err.stack); // an error occurred
        else     console.log('logging data' + data);  // successful response
    });
};

В результате ключ успешно помещается в хранилище s3, но файлразмер загруженного файла составляет 0 байт.Любая идея, почему это может привести к пустой загрузке?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Вместо того, чтобы писать лямбду для копирования из одной корзины s3 в другую, почему бы не установить правило репликации для исходной корзины s3?Он будет автоматически копировать любые загруженные файлы, и вы можете сделать это кросс-аккаунт.

enter image description here

0 голосов
/ 19 сентября 2018

Файл должен быть загружен, что занимает некоторое время, поэтому вам нужно использовать вызов file.on ('finish') следующим образом.

  const writeStream = fs.createWriteStream(inputFilename);
  s3.getObject(getParams).createReadStream().pipe(writeStream);
  writeStream.on('finish', function() { 

  //upload to S3 code
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...