首页 > 解决方案 > 我们可以在 Spring Boot 中将 csv 文件写入 S3 而不在本地创建文件吗?

问题描述

我有一组对象,想将这些数据作为 CSV 文件存储在 AWS S3 存储桶上,而不创建任何本地文件。谁能建议如何在不影响性能的情况下顺利完成?

例如:Set<Address> addresses;//地址类包含一些字段,如城市、州、邮政编码和国家。

它应该创建一个包含以下标题和数据的 csv 文件:

City, State, ZipCode, Country
-----------------------------

Mumbai, Maharashtra, 4200091, India

我知道的一件事是我们可以将数据写入 InputStream,然后将其传递给 -PutObjectRequest。但是 InputStream 也需要文件路径,我不想浪费时间创建临时文件,而且我有多个操作要做。

PutObjectRequest putObj = new PutObjectRequest(bucketName, KeyName, inputStream, metadata); 
s3client.putObject(putObj);

提前感谢您的帮助和时间。

标签: javaamazon-web-servicesspring-bootamazon-s3

解决方案


你可以这样做:

  1. 创建 csv 输出流:(参考:)

要添加的依赖项(有关使用的示例,请参阅上面的链接):

<dependency>
    <groupId>net.sourceforge.javacsv</groupId>
    <artifactId>javacsv</artifactId>
    <version>2.0</version> </dependency>

代码 :

public void createCsv() throws Exception {

    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    CsvWriter writer = new CsvWriter(stream, ',', Charset
            .forName("ISO-8859-1"));

    writer.setRecordDelimiter(';');
    // WRITE Your CSV Here
    //writer.write("a;b");
    writer.endRecord();
    writer.close();

    stream.close();    }
  1. 通过字节数组将输出流转换为输入流:

    InputStream inputStream = new ByteArrayInputStream(stream.toByteArray());

  2. 将此流传递给 S3 PutObjectRequest


推荐阅读