Amazon web services 如何使用Node.js从AWS Lambda中的/tmp文件夹将WAV文件上载到S3
我已经成功地创建了一个AWS Lambda函数来使用sox处理一些音频,并将结果存储到/tmp文件夹中。我想把结果文件上传到S3。我试过多种方法,但都没有成功。以下是我的功能:Amazon web services 如何使用Node.js从AWS Lambda中的/tmp文件夹将WAV文件上载到S3,amazon-web-services,amazon-s3,aws-lambda,Amazon Web Services,Amazon S3,Aws Lambda,我已经成功地创建了一个AWS Lambda函数来使用sox处理一些音频,并将结果存储到/tmp文件夹中。我想把结果文件上传到S3。我试过多种方法,但都没有成功。以下是我的功能: const lambdaAudio = require('lambda-audio') const fs = require('fs') exports.handler = function(event, context) { lambdaAudio.sox('./input.mp3 -c 1 /tmp/outp
const lambdaAudio = require('lambda-audio')
const fs = require('fs')
exports.handler = function(event, context) {
lambdaAudio.sox('./input.mp3 -c 1 /tmp/output.wav')
.then(response => {
if (fs.existsSync('/tmp/output.wav')) {
console.log('output.wav file exists.') // This works!
// UPLOAD TO S3 HERE HOW???
}
})
.catch(errorResponse => {
console.log('Error from the sox command:', errorResponse)
})
}
更新:
以下是我的最终工作版本,其中包含了DPWRUSELL的答案:
var lambdaAudio = require('lambda-audio')
var fs = require('fs')
var AWS = require('aws-sdk');
var accessKeyId = "xxxxxxxxxxxxxxxxxxxxx";
var secretAccessKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
AWS.config.update({
accessKeyId: accessKeyId,
secretAccessKey: secretAccessKey
});
exports.handler = function(event, context) {
lambdaAudio.sox('./input.mp3 -c 1 /tmp/output.wav')
.then(response => {
if (fs.existsSync('/tmp/output.wav')) {
console.log('output.wav file exists.')
uploadToS3();
}
})
.catch(errorResponse => {
console.log('Error from the sox command:', errorResponse)
})
}
function uploadToS3() {
fs.readFile('/tmp/output.wav', function (err, data) {
if (err) { throw err; }
var base64data = new Buffer(data, 'binary');
var s3 = new AWS.S3();
s3.putObject({
Bucket: 'my-bucket',
Key: 'output.wav',
Body: base64data
},function (resp) {
console.log('Done');
});
});
}
只需使用S3API即可。lamba函数角色需要权限才能上载到此S3存储桶
var AWS = require('aws-sdk');
fs.readFile('/tmp/output.wav', function (err, data) {
if (err) { throw err; }
var base64data = new Buffer(data, 'binary');
var s3 = new AWS.S3();
s3.putObject({
Bucket: 'mybucket',
Key: 'output.wav'
Body: base64data
},function (resp) {
console.log('Done');
});
});
我尝试将其添加到我的代码中,但得到“TypeError:无法读取未定义的属性'putObject'。有关代码,请参见上面的我的更新。我的打字错误是
s3.putObject
,而不是s3.client.putObject
。答对了。好极了。非常感谢。它起作用了!我在上面的原始问题下发布了更新。