Попытка отправить читаемый поток (аудио) на amazon s3 - ошибка во время выполнения - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь написать функцию, которая берет mp3-адрес записи и затем загружает ее на S3.Тем не менее, я продолжаю получать ошибки во время выполнения, и обратный вызов никогда не достигается.Если я переместу обратный вызов ниже s3.upload(...), то утверждение «попытка загрузки mp3 никогда не будет зарегистрировано.

exports.handler = function(context, event, callback) {
  const twiml = new Twilio.twiml.VoiceResponse();
  var AWS = require('aws-sdk');
  var s3 = new AWS.S3();
  var getUri = require('get-uri');

  AWS.config.update({
    accessKeyId: "...",
    secretAccessKey: "..."
  });

  var client = context.getTwilioClient();
  const recording_id = event.RecordingSid;
  const uri = event.RecordingUrl + ".mp3";

  getUri(uri, function (err, rs) {
    if (err) {
        console.log(err.message);
        throw err;
    }
    var params = {
        ACL: "public-read",
        Body: rs,
        Bucket: "...",
        Key: "audio.mp3",
        ContentType: 'audio/mp3'
    };
    s3.upload(params, function(err,data) {
        console.log("attempting to upload mp3");
        if (err) {
            console.log("there is an error");
            console.log(err.status);
            throw err.message;
        }
        else {
            console.log("Your upload has been successful.");
          }
        callback(null, twiml);
      });
});


   console.log("at the end");
 };

Есть ли другой способ получить доступ к записи и поместить их в мое общедоступное ведро s3? Почемуэто никогда не выполняется s3.upload(...).
Любое понимание этого полезно! Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 10 июля 2018

Я связался с Twilio по этому поводу, и они ответили, что функции Twilio имеют строгое 5-секундное время ожидания, а загрузка из функции Twilio в S3 Bucket занимает более 5 секунд.Мой обходной путь отправлял строку со всеми mp3-URL, разделенными запятой и пробелом.Затем лямбда-функция будет анализировать все ссылки и сохранять все ссылки в массиве, который будет использоваться для воспроизведения аудио.

0 голосов
/ 07 июня 2018
   app.get('/uploadsong',function(req,res){
    console.log("Hi there")
    var URI = 'http://sensongsmp3download.info/Kaala%20(2018)%20-%20Sensongsmp3.info/Thanga%20Sela%20--%20Sensongsmp3.Info.mp3';
    var buffer = [];

    request
        .get(URI)
        .on('error', function(err) {
        console.log("error")
    }).on('data',function(data){
        buffer.push(data);
    }).on('end',function(){
        var completeSong = Buffer.concat(buffer);

        var data = {
            Body:completeSong,
            Key: 'sample.mp3',
            ContentType: 'audio/mp3'
        }

        s3Bucket.putObject(data, function(err, data){ 
            if (err) 
            { 
                console.log('Error uploading data: ', data); 
            } else 
            {
                console.log('upload successfull')
                res.send('done');
            }

        })



    })

})

вот модули, которые я использовал

var request = require('request');
...