我想知道是否可以为AWS设置一个lambda函数,每当一个新的文本文件上传到s3 bucket时就会触发这个函数。在函数中,我想获取文本文件的内容,并以某种方式对其进行处理。我在想这有没有可能...?
例如,如果我上传了foo.txt,内容为foobarbaz,我希望在lambda函数中使用foobarbaz,这样我就可以用它来做一些事情。我知道我可以从getObject获取元数据,或者类似的方法。
谢谢!
您可以使用data.body.toString('ascii')
获取文本文件的内容,假设文本文件是使用ascii格式编码的。还可以将其他编码类型传递给函数。请查看Node-Buffer以了解更多详细信息。
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遵循一个由不同处理层定义的本体学习过程。在普通术语提取的基础上,通过对提取的概念进行聚类,形成概念层次结构。然后,衍生术语“分类法”将丰富非分类关系。已经研