当前位置: 首页 > 知识库问答 >
问题:

如何使用lambda函数从AWS3获取文本文件的内容?

濮阳国兴
2023-03-14

我想知道是否可以为AWS设置一个lambda函数,每当一个新的文本文件上传到s3 bucket时就会触发这个函数。在函数中,我想获取文本文件的内容,并以某种方式对其进行处理。我在想这有没有可能...?

例如,如果我上传了foo.txt,内容为foobarbaz,我希望在lambda函数中使用foobarbaz,这样我就可以用它来做一些事情。我知道我可以从getObject获取元数据,或者类似的方法。

谢谢!

共有2个答案

宗安翔
2023-03-14

您可以使用data.body.toString('ascii')获取文本文件的内容,假设文本文件是使用ascii格式编码的。还可以将其他编码类型传递给函数。请查看Node-Buffer以了解更多详细信息。

宦书
2023-03-14

S3对象键和bucket名称通过event参数传递到Lambda函数中。然后可以从S3获取对象并读取其内容。

从Lambda事件检索bucket和对象键的基本代码如下:

exports.handler = function(event, context, callback) {
   var src_bkt = event.Records[0].s3.bucket.name;
   var src_key = event.Records[0].s3.object.key;
};

有了bucket和key之后,就可以调用getObject来检索对象:

var AWS = require('aws-sdk');
var s3 = new AWS.S3();

exports.handler = function(event, context, callback) {

    // Retrieve the bucket & key for the uploaded S3 object that
    // caused this Lambda function to be triggered
    var src_bkt = event.Records[0].s3.bucket.name;
    var src_key = event.Records[0].s3.object.key;

    // Retrieve the object
    s3.getObject({
        Bucket: src_bkt,
        Key: src_key
    }, function(err, data) {
        if (err) {
            console.log(err, err.stack);
            callback(err);
        } else {
            console.log("Raw text:\n" + data.Body.toString('ascii'));
            callback(null, null);
        }
    });
};

下面是一个更新的JavaScript示例,使用ES6风格的代码和承诺,减去错误处理:

const AWS = require('aws-sdk');
const s3 = new AWS.S3();

exports.handler = async (event, context) => {
  const Bucket = event.Records[0].s3.bucket.name;
  const Key = event.Records[0].s3.object.key;
  const data = await s3.getObject({ Bucket, Key }).promise();
  console.log("Raw text:\n" + data.Body.toString('ascii'));
};

很多海报都要求在Java提供类似的服务,下面是一个例子:

package example;

import java.net.URLDecoder;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.S3Event;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.event.S3EventNotification.S3EventNotificationRecord;

public class S3GetTextBody implements RequestHandler<S3Event, String> {

    public String handleRequest(S3Event s3event, Context context) {
        try {
            S3EventNotificationRecord record = s3event.getRecords().get(0);

            // Retrieve the bucket & key for the uploaded S3 object that
            // caused this Lambda function to be triggered
            String bkt = record.getS3().getBucket().getName();
            String key = record.getS3().getObject().getKey().replace('+', ' ');
            key = URLDecoder.decode(key, "UTF-8");

            // Read the source file as text
            AmazonS3 s3Client = new AmazonS3Client();
            String body = s3Client.getObjectAsString(bkt, key);
            System.out.println("Body: " + body);
            return "ok";
        } catch (Exception e) {
            System.err.println("Exception: " + e);
            return "error";
        }
    }
}
 类似资料:
  • 该如何用bs4解析它以获得仅有的国家值? 通过这段代码,我从td获得了所有文本,但我不明白如何具体引用国家 我有这根绳子

  • 问题内容: 我正在尝试使用Python中的webdriver以 HTML形式获取文本区域的内容。 我正在获取文本,但是缺少换行符。该selenium文档是几乎无用的; 他们说: selenium.webdriver.remote.webelement.WebElement类(父代,id_) […] text:获取元素的文本。 我目前正在执行以下操作: 这会打印文本区域内容的Python unico

  • 请不要使用“tika”作为答案。我已经尝试了这个问题的答案: 如何从PDF文件中提取文本? 我有这个PDF文件,https://drive.google.com/file/d/1aUfQAlvq5hA9kz2c9CyJADiY3KpY3-Vn/view?usp=sharing,我想复制文本。 输出为“提交日期:2019-10-21 16:03:36.093 |表单键:5544”,这只是文本的一部分

  • 问题内容: 给定Python 2.6中的RFC822消息,如何获得 正确的 文本/纯文本内容部分?基本上,我想要的算法是这样的: 这些事,我和拍下来,但我不太清楚如何从MIME部分解码的文本。我可以使用来获取 编码后的 文本,但是如果尝试使用方法的参数(请参阅doc),则在text / plain部分调用它时会出现错误: “/System/Library/Frameworks/Python.fra

  • 我有一个特定目录中的文件名列表, 我正在尝试使用re。按如下方式搜索此内容 现在,当我打印过滤值时,它会再次打印整个文件名,我如何才能让它只打印文件名的某些部分 这里是我看到的 相反,我想 我该怎么做?

  • 我有一些pdf文件,使用pdfbox我已经将它们转换为文本并存储到文本文件中,现在我要从文本文件中删除它们 超链接 我希望按如下方式逐行获取有效文本: 我们提出了一种从纯文本中提取的多词概念词进行本体学习的方法OntoGain。OntoGain遵循一个由不同处理层定义的本体学习过程。在普通术语提取的基础上,通过对提取的概念进行聚类,形成概念层次结构。然后,衍生术语“分类法”将丰富非分类关系。已经研