Spring Boot Spring AWS S3选择查询

pinkon5k  于 2022-11-05  发布在  Spring
关注(0)|答案(1)|浏览(162)

我如何从S3 bucket中取出一个对象,一个文件,并将其读入spring-boot和java中的一个对象中。因此,我在S3中有一个文件,它包含多个json行,我想将其从那里读入对象列表。
现在我下面这个例子:
https://codetinkering.com/aws-s3-select-api-java-example/
如果我想流传输它,但我想读入一个对象列表,它就可以工作。
该文件包含多行数据,每行都是一个json对象,在AWS UI中,使用s3 select可以很好地工作

{
   "name":"ABC"
   "surname":"DEF"
}
{
   "name":"ABC"
   "surname":"DEF"
}
yyyllmsg

yyyllmsg1#

下面是实现,首先在pom.xml中添加此依赖项

<dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>s3</artifactId>
            <version>2.17.285</version>
         </dependency>

文件内容-此文件(文件名. txt)存在于AWS S3存储桶中

{
   "name":"rohit",
   "surname":"sharma"
}
{
   "name":"virat",
   "surname":"kohli"
}

Java类

第一个

AwsS 3Service V1 - * 正在阅读S3文件记录并创建对象列表*

@Service
public class AwsS3Service {

    private final S3Client s3Client;

    @Autowired
    public AwsS3Service(S3Client s3Client) {
        this.s3Client = s3Client;
    }

    public List<Person> readFileAndCreateList(String bucketName, String keyName) throws IOException {
        final Path file = readFile(bucketName, keyName);
        return convertFileToList(file);
    }

    private Path readFile(String bucketName, String keyName) throws IOException {
        GetObjectRequest getObjectRequest = GetObjectRequest
                .builder()
                .bucket(bucketName)
                .key(keyName)
                .build();

        final byte[] bytes = s3Client
                .getObject(getObjectRequest)
                .readAllBytes();
        final Path path = Paths.get("demo.txt");
        Files.write(path, bytes);
        return path;
    }

    private List<Person> convertFileToList(Path path) throws IOException {
        final List<String> lines = Files.readAllLines(path);
        StringBuilder json = new StringBuilder();
        List<Person> persons=new ArrayList<>();
        for (String line : lines) {
            if ("{".equals(line)) {
                json = new StringBuilder("{");
            } else if ("}".equals(line)) {
                json.append("}");
               persons.add(new ObjectMapper()
                        .readValue(json.toString(), Person.class));
            } else {
                json.append(line.trim());
            }
        }
        return persons;
    }
}

AwsS 3Service V2 - * 正在阅读内存中的S3文件记录并创建对象列表*

一个

输出

[Person{name='rohit', surname='sharma'}, Person{name='virat', surname='kohli'}]

相关问题