Node.js 试图将可读流(音频)发送到amazon s3-运行时错误
我正在尝试编写一个函数,获取录制的mp3 url,然后将其上传到S3。但是,我不断收到一个运行时错误,并且从未到达回调。如果我将回调移动到s3.upload(…)下面,则“尝试上载mp3从未被记录”语句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 =
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