Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 试图将可读流(音频)发送到amazon s3-运行时错误_Node.js_Amazon Web Services_Amazon S3_Twilio_Twilio Api - Fatal编程技术网

Node.js 试图将可读流(音频)发送到amazon s3-运行时错误

Node.js 试图将可读流(音频)发送到amazon s3-运行时错误,node.js,amazon-web-services,amazon-s3,twilio,twilio-api,Node.js,Amazon Web Services,Amazon S3,Twilio,Twilio Api,我正在尝试编写一个函数,获取录制的mp3 url,然后将其上传到S3。但是,我不断收到一个运行时错误,并且从未到达回调。如果我将回调移动到s3.upload(…)下面,则“尝试上载mp3从未被记录”语句 exports.handler = function(context, event, callback) { const twiml = new Twilio.twiml.VoiceResponse(); var AWS = require('aws-sdk'); var s3 =

我正在尝试编写一个函数,获取录制的mp3 url,然后将其上传到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(…)

对此的任何见解都是有帮助的!提前感谢

   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');

我就此联系了Twilio,他们回答说Twilio函数有一个严格的5秒超时,从Twilio函数上传到S3 Bucket需要5秒以上。我的解决方法是发送一个字符串,其中所有mp3 URL用逗号和空格分隔。然后lambda函数将解析所有链接并存储所有链接在一个用于音频播放的阵列中。

您能确认audio_mp3是否包含mp3的内容或mp3Oh的URL吗?它包含mp3的URL。如果我复制粘贴URL,我确实会看到一个屏幕,屏幕上有一个搜索栏,可以播放正确的录音。您正在传递URL,并希望将.mp3文件上载到s3。我们需要有相应的代码从URL下载数据,然后将该数据发送到put对象的主体。以下是可以传递到putobject主体的内容:主体-(缓冲区、类型化数组、Blob、字符串、ReadableStream)对象数据。嗨,我正在尝试使用可读流,但它不起作用。我已经更新了上面的代码。还有其他方法吗?我应该使用BLOB吗?谢谢!我已经添加了上载歌曲的代码。请仔细查看。我能够从URL成功下载歌曲并上载到s3