amazon-web-services - 使用 AWS Lambda 函数和 Amazon S3 事件 (JAVA) 创建文件
问题描述
我是 AWS 的新手,但我的 AWS 项目有问题:
当我在同一个存储桶中添加 CSV 文件时,我想在我的 Amazon S3 存储桶中创建一个 PDF 文件。我为此使用了 lambda 函数。然后,我在上传 CSV 文件时使用调用我的函数的事件。
但我无法创建此文件。
这是我的代码:
public class LambdaFunctionHandler implements RequestHandler<S3Event, String> {
private AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion("us-east-1").enablePathStyleAccess().disableChunkedEncoding().build();
public LambdaFunctionHandler() {}
LambdaFunctionHandler(AmazonS3 s3) {
this.s3Client = s3;
}
@Override
public String handleRequest(S3Event event, Context context) throws AmazonServiceException {
LambdaLogger logger = context.getLogger();
logger.log("Received event: " + event);
try {
S3EventNotificationRecord record = event.getRecords().get(0);
String bucket = record.getS3().getBucket().getName();
String key = record.getS3().getObject().getKey();
String body = (s3Client.getObjectAsString(bucket, key)).replace(';', ' ');
System.out.println("CSV Data : " + body);
String nameOfTheNewFile = "newFileObjKeyName.pdf";
//PDF Create
Document document = new Document(PageSize.A4, 50, 50, 50, 50);
PdfWriter.getInstance(document, new FileOutputStream("FileCreated.pdf"));
document.open();
document.add(new Paragraph("Data test")); // add data content to pdf
document.close();
PutObjectRequest request = new PutObjectRequest(bucket, nameOfTheNewFile, new File("FileCreated.pdf"));
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("plain/text");
metadata.addUserMetadata("title", "someTitle");
request.setMetadata(metadata);
s3Client.putObject(request);
return "ok";
}
catch (Exception e) {
System.err.println("Exception : " + e);
return "err";
}
}
}
我的 lambda 函数作为 .JAR 存储在另一个 Bucket 中。我的日志返回了这个错误:
异常:java.io.FileNotFoundException:FileCreated.pdf(只读文件系统)
我正在寻找这个问题的答案,但我无法解除自己的封锁。
感谢大家的帮助!
解决方案
推荐阅读
- python - 如何从包含其名称的字符串中选择一个变量?
- android - 如何通过自定义对象从 Firestore 获取文档内容?(安卓 - 科特林)
- vue.js - 是否有在 vue-dropzone 消息区域中加载自定义 HTML 元素的有效解决方案?
- python - 如何处理发生在 Keras 的自定义层中的代码错误?
- javascript - 在 this.state 中使用 JSX,但它被呈现为纯文本
- flutter - Flutter 应用会产生过多的缓存吗?
- html - 导航菜单显示在桌面,但不显示在移动视图中
- python - 了解 GIL 对并发服务器的性能影响
- swift - 如何验证使用 XCTAssert 调用了类方法?
- google-bigquery - `WriteToBigQuery` 和 `BigQuerySink` 之间有什么区别