我无法从 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调用函数中缓冲的返回数据有关。但我无法弄清楚这一点。
通过更改修复它
这个:
var base64data = new Buffer(body, 'binary');
resolve(base64data);
对此:
var buffer = "";
buffer = Buffer.concat(body);
resolve(buffer);