使用 Node 从 s3 存储桶中读取 txt 文件的内容

Posted

技术标签:

【中文标题】使用 Node 从 s3 存储桶中读取 txt 文件的内容【英文标题】:Read content of txt file from s3 bucket with Node 【发布时间】:2020-08-29 16:18:48 【问题描述】:

我想读取存储在 s3 存储桶中的 .txt 文件的内容。

我试过了:

var s3 = new AWS.S3(apiVersion: '2006-03-01');
var params = Bucket: 'My-Bucket', Key: 'MyFile.txt';
var s3file = s3.getObject(params)

但是我得到的 s3file 对象不包含文件的内容。

你有什么想法吗?

【问题讨论】:

这能回答你的问题吗? Read file from aws s3 bucket using node fs 【参考方案1】:

同意zishone,这里是异常处理的代码:

var s3 = new AWS.S3(apiVersion: '2006-03-01');
var params = Bucket: 'My-Bucket', Key: 'MyFile.txt';

s3.getObject(params , function (err, data) 

    if (err) 
        console.log(err);
     else 
        console.log(data.Body.toString());
    

)

【讨论】:

谢谢,它不会引发错误,但不会在控制台中打印某些内容。为什么 ?如何得到结果? 这东西对我来说非常有效。发布您的 lambda 和您正在使用的角色,以及存储桶策略(如果有)。这是我的 lmbda var AWS = require('aws-sdk'); var s3 = 新 AWS.S3(); export.handler = (事件、上下文、回调) => var s3 = new AWS.S3(apiVersion: '2006-03-01'); var params = Bucket: 'bucket-name', Key: 'test.txt'; s3.getObject(params, function (err, data) if (err) console.log(err); else console.log("TEXT FROM FILE:" + data.Body.toString()); ) ; 我使用 lambda 完全访问角色,以及您发送的代码。它不会在控制台中打印任何内容。【参考方案2】:

根据docs,您的文件内容将在结果的Body 字段中,它将是Buffer

还有一个问题是s3.getObject( 应该有一个回调。

s3.getObject(params, (err, s3file) => 
    const text = s3file.Body.toString();
)

【讨论】:

Thx,但是,如何返回 str 变量中的内容? (我是 Node 新手..)

以上是关于使用 Node 从 s3 存储桶中读取 txt 文件的内容的主要内容,如果未能解决你的问题,请参考以下文章

从 S3 存储桶中读取大量 CSV 文件

如何从 S3 存储桶中读取最后修改的 csv 文件?

使用带有 Node.js 的 AWS Lambda 函数从 S3 存储桶中提取 zip 文件并上传到另一个存储桶

如何从 S3 存储桶中仅读取最近 7 天的 csv 文件

是否可以直接从存储在 S3 上的 zip 文件中读取特定文件?

如何从 Spark 中的多个云存储桶中读取 TXT 文件?