gpt4 book ai didi

从 S3 存储桶访问时出现 java.io.FileNotFoundException?

转载 作者:行者123 更新时间:2023-12-02 02:10:29 26 4
gpt4 key购买 nike

我正在 AWS 中做一个小型 POC。我尝试从 S3 存储桶读取 csv 文件并显示在 CloudWatch 日志文件中。一切都很顺利,但是在访问文件时出现 java.io.FileNotFoundException

编码

public class LambdaFunctionHandler implements RequestHandler<S3Event, Report> {

Region AWS_REGION = Region.getRegion(Regions.US_EAST_1);

public Report handleRequest(S3Event s3event, Context context) {
long startTime = System.currentTimeMillis();
Report statusReport = new Report();
LambdaLogger logger = context.getLogger();

logger.log("Lambda Function Started");
logger.log("I am inside lambda function");
Helper helper = new Helper();

try {
logger.log("I am inside lambda function2");
S3EventNotificationRecord record = s3event.getRecords().get(0);
logger.log("I am inside lambda function3");
String srcBucket = record.getS3().getBucket().getName();
logger.log("I am inside lambda function4");
// Object key may have spaces or unicode non-ASCII characters.
String srcKey = record.getS3().getObject().getKey().replace('+', ' ');
logger.log("I am inside lambda function5");
srcKey = URLDecoder.decode(srcKey, "UTF-8");
logger.log("I am inside lambda function6");

AmazonS3 s3Client = new AmazonS3Client();
logger.log("I am inside lambda function7");
S3Object s3Object = s3Client.getObject(new GetObjectRequest(srcBucket, srcKey));
logger.log("I am inside lambda function8");
statusReport.setFileSize(s3Object.getObjectMetadata().getContentLength());
logger.log("I am inside lambda function9");

logger.log("S3 Event Received: " + srcBucket + "/" + srcKey);
logger.log("I am inside lambda function10");

File file = new File(srcBucket+"/"+srcKey);
try {
Scanner readData =new Scanner(file);
while(readData.hasNext()) {
String data = readData.next();
logger.log("I am inside lambda function data ;;got it");
//System.out.println("data"+data);
}
readData.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}

CloudWatch 日志文件输出

enter image description here

CloudWatch 日志错误

我在 lambda 函数内

我在 lambda function2 内

我在 lambda function3 内

我在 lambda 函数4内

我在 lambda 函数5内

我在 lambda 函数 6 内

我在 lambda 函数7内

我在 lambda 函数8内

我在 lambda 函数内

收到 S3 事件:readfilefromcsvfile/def_nhtsa_crash_test.csv

我在 lambda 函数10内

java.io.FileNotFoundException:

readfilefromcsvfile/def_nhtsa_crash_test.csv(没有这样的文件或目录)java.io.FileNotFoundException:readfilefromcsvfile/def_nhtsa_crash_test.csv(没有这样的文件或目录)在 java.io.FileInputStream.open0( native 方法)

如果我们查看日志输出,它会告诉您没有这样的文件,但我已将其保存在 S3 存储桶中。谁能告诉我如何在java中访问S3文件?或者访问 S3 存储桶文件时我应该提供的路径名是什么?

最佳答案

此处无需创建 File 实例。您可以简单地处理 S3 输入流。

S3Object s3Object = s3Client.getObject(new GetObjectRequest(srcBucket, srcKey));
....
Scanner scanner = new Scanner(s3Object.getObjectContent());
while (scanner.hasNext()) {
System.out.println(scanner.next());
}

关于从 S3 存储桶访问时出现 java.io.FileNotFoundException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50113126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com