我试图下载从S3 lambda函数内部的视频文件。我们的想法是,只要将视频文件上传到S3桶lambda函数将被触发。在lambda表达式,我下载视频文件,并将其存储的/ tmp /存储。
这里是我的代码,
const fs = require('fs');
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
exports.handler = function (event, context, callback) {
var params = {
Bucket: "Bucket_name",
Key: event.Records[0].s3.object.key
}
console.log("key ", event.Records[0].s3.object.key);
s3.getObject(params, function(err, data){ if (err) {
console.error(err.code, "-", err.message);
return callback(err);
}
fs.writeFile("/tmp/vid.mp4", data.Body, function(err){
if(err)
console.log(err.code, "-", err.message);
return callback(err);
});
var stats = fs.statSync("/tmp/vid.mp4");
console.log("size of the file ", stats["size"]);
});
};
不过,虽然在执行此lambda函数,我没有得到任何错误。但是,当我检查文件的大小,它给了0。我没有关于如何解决此问题的想法。拉姆达tmp目录存储下载此文件后,我有这个视频文件转换成音频文件。所以,请帮我找出解决办法。
谢谢,
代码是异步运行,console.log
文件尺寸writeFile
之前完成执行。你需要把statSync
的writeFile
回调中:
fs.writeFile("/tmp/vid.mp4", data.Body, function(err){
if(err) console.log(err.code, "-", err.message);
var stats = fs.statSync("/tmp/vid.mp4");
console.log("size of the file ", stats["size"]);
return callback(err);
});
到writeFile
呼叫是异步的,即函数立即“端部”,并且程序执行与statSync
呼叫继续。与writeFileSync
更换。