簡體   English   中英

將圖像從 S3 存儲桶下載到 Lambda 臨時文件夾 (Node.js)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM