![](/img/trans.png)
[英]How to download Zip File from an s3 bucket to a local directory within a node.js lambda function
[英]Download image from S3 bucket to Lambda temp folder (Node.js)
美好的一天,伙計們。
我有一個簡單的問題:如何將圖像從 S3 存儲桶下載到 Lambda 函數臨時文件夾進行處理? 基本上,我需要將它附加到電子郵件中(我可以在本地測試時這樣做)。
我努力了:
s3.download_file(bucket, key, '/tmp/image.png')
以及(不確定哪些參數可以幫助我完成工作):
s3.getObject(params, (err, data) => {
if (err) {
console.log(err);
const message = `Error getting object ${key} from bucket ${bucket}.`;
console.log(message);
callback(message);
} else {
console.log('CONTENT TYPE:', data.ContentType);
callback(null, data.ContentType);
}
});
就像我說的,簡單的問題,由於某種原因我找不到解決方案。
謝謝!
您可以使用 aws s3 api 獲取圖像,然后使用 fs 將其寫入 tmp 文件夾。
var params = { Bucket: "BUCKET_NAME", Key: "OBJECT_KEY" };
s3.getObject(params, function(err, data){ if (err) {
console.error(err.code, "-", err.message);
return callback(err); }
fs.writeFile('/tmp/filename', data.Body, function(err){
if(err)
console.log(err.code, "-", err.message);
return callback(err);
});
});
出於好奇,為什么您需要編寫文件才能附加它? 將文件寫入磁盤似乎有些多余,以便您可以從磁盤讀取它
如果您直接將其寫入文件系統,您也可以使用流來完成。 它可能更快/更內存友好,尤其是在像 Lambda 這樣的內存受限環境中。
var fs = require('fs');
var path = require('path');
var params = {
Bucket: "mybucket",
Key: "image.png"
};
var tempFileName = path.join('/tmp', 'downloadedimage.png');
var tempFile = fs.createWriteStream(tempFileName);
s3.getObject(params).createReadStream().pipe(tempFile);
// Using NodeJS version 10.0 or later and promises
const fsPromise = require('fs').promises;
try {
const params = {
Bucket: 's3Bucket',
Key: 'file.txt',
};
const data = await s3.getObject(params).promise();
await fsPromise.writeFile('/tmp/file.txt', data.Body);
} catch(err) {
console.log(err);
}
對我來說,唯一的問題是我在我的 aws lambda 中使用 Runtime.NODEJS_12_X,當我切換到 14 而不是 12 時它起作用了。:')。 還需要“/tmp/”,是的,它將直接寫入“/tmp/file.ext”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.