NodeJS - Lambda -> 下载 mp3 文件并将其上传到 s3 存储桶

问题描述 投票:0回答:1

我无法从 NodeJS 中的 https 请求获取 mp3 文件并将其上传到 s3 存储桶。

所以我有以下代码:

function getMP3() {
     return new Promise((resolve, reject) => {
        const options = {
            host: "blablablabla.com",
            path: "/audio/test.mp3"
            method: 'GET'
        };

        const req = https.request(options, (res) => {

          if (res.statusCode < 200 || res.statusCode >= 300) {
                return reject(new Error('statusCode=' + res.statusCode));
            }
            var body = [];
            res.on('data', function(chunk) {
                body.push(chunk);
            });
            res.on('end', function() {
                try {
                    var base64data = new Buffer(body, 'binary');
                    resolve(base64data);
                } catch(e) {
                    reject(e);
                }
               
            });
        });
        req.on('error', (e) => {
          reject(e.message);
        });
        // send the request
       req.end();
    });
}

此函数应返回 mp3 文件的内容。 之后我调用上传到 s3 存储桶的函数 文件名是在函数调用时生成的。而fileData就是上面函数的返回值。

文件已上传,但只有几个字节,并且无法在我的 mp3 播放器中播放。


function uploadFileOnS3(fileName, fileData){
        var params = {
            Key: fileName,
            Body: fileData
        };
        
        s3bucket.upload(params, function (err, res) {     
            if(err){
                console.log("Error in uploading file on s3 due to "+ err);
            }else{    
                console.log("File successfully uploaded.");
            }
        });
}

有人知道我做错了什么吗?我猜这与mp3调用函数中缓冲的返回数据有关。但我无法弄清楚这一点。

javascript node.js aws-lambda mp3
1个回答
0
投票

通过更改修复它

这个:

var base64data = new Buffer(body, 'binary');
resolve(base64data);

对此:

var buffer = "";
buffer = Buffer.concat(body);
resolve(buffer);
© www.soinside.com 2019 - 2024. All rights reserved.