abd*_*rik 8 amazon-s3 amazon-web-services node.js aws-lambda
我工作的数据管理应用程序,其中客户端可以上传zip file(approx 250 MB)多text files(approx 1500 MB)上AWS S3。
但是由于有限的内存aws lamda(最大1536MB大小),我能够提取(50 MB)的zip文件和(500 MB)的提取文件。
由于我需要在提取时对提取的文件添加一些验证,之后我必须将文件的所有内容存储到数据库中。
目前,我正在存储文件的内容,aws-lambda tmp location其中也可以使用最大500MB的限制。
任何可以帮助我完成上述任务并进行验证的流媒体概念都将对我有所帮助。
我可以一起去,EC2, ECS但现在我只想一起去AWS-Lambda。
通过此代码,我将zip文件提取并上传到另一个S3存储桶。
任何其他类似流媒体的概念对我都会有所帮助,因为我对流媒体概念不是很熟悉,我在这里提出一些想法来解决我的问题。
s3.getObject(params, (err, data) => {
if (err) {
console.log('Error', err);
var message = `Error getting object ${key} from bucket ${bucket}. Make sure they exist and your bucket is in the same region as this function.`;
console.log(message);
// callback(message);
} else {
console.log('Started to buffer data');
JSZip.loadAsync(data.Body).then(function(zip) {
fs.writeFile('temp/hello.txt', 'New file added for testing');
async.each(zip.files, function(item, cb1) {
if (!item.dir && item.name.includes('nightly')) {
zip.file(item.name).async("text").then(function(content) {
fs.writeFile('temp/' + item.name.replace(/^.*[\\\/]/, ''), content, function(err) {
if (err) throw err;
cb1();
});
});
} else {
cb1();
}
}, function(err, result) {
var zipObj = new JSZip();
fs.readdir('./temp', function(err, files) {
console.log(files);
async.each(files, function(file, cb2) {
fs.readFile('./temp/' + file, 'utf-8', function(err, content) {
if (err) {
return err;
}
zipObj.file(file, content);
cb2();
});
}, function(err) {
zipObj.generateAsync({
type: "nodebuffer"
})
.then(function(content) {
console.log(content);
deleteFiles(['./temp/*'], function(err, paths) {
console.log('Deleted files/folders:\n', paths.join('\n'));
});
s3.putObject({
Bucket: 'abtempb',
Key: 'temp/records.zip',
Body: content
}, function(err, result) {
if (result && result.ETag) {
console.log('uploaded file: ', result.ETag);
}
console.log('Error ', err);
});
});
});
});
});
});
}
});
Run Code Online (Sandbox Code Playgroud)
谢谢
| 归档时间: |
|
| 查看次数: |
2527 次 |
| 最近记录: |