为了账号安全,请及时绑定邮箱和手机立即绑定

我们可以在 spring boot 中不在本地创建文件的情况下将 csv 文件写入 S3 吗?

我们可以在 spring boot 中不在本地创建文件的情况下将 csv 文件写入 S3 吗?

慕少森 2023-05-17 14:54:20
我有一些对象集,想将这些数据作为 CSV 文件存储在 AWS S3 存储桶上,而不创建任何本地文件。谁能建议如何在不影响性能的情况下顺利完成?例如:Set<Address> addresses;//Address 类包含一些字段,如城市、州、邮政编码和国家/地区。它应该创建一个包含以下标题和数据的 csv 文件:City, State, ZipCode, Country-----------------------------Mumbai, Maharashtra, 4200091, India我知道的一件事是我们可以将数据写入 InputStream,然后将其传递给 -PutObjectRequest。但是 InputStream 也需要文件路径我不想浪费时间创建临时文件而且我有多个操作要做。PutObjectRequest putObj = new PutObjectRequest(bucketName, KeyName, inputStream, metadata); s3client.putObject(putObj);在此先感谢您的帮助和时间。
查看完整描述

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

你可以这样做:


创建 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();    }

通过字节数组将输出流转换为输入流:


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


将此流传递给 S3 PutObjectRequest


查看完整回答
反对 回复 2023-05-17
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

InputStream是一个抽象类(也许应该是一个接口)。您可以使用任何 InputStream 的子类或可以生成 InputStream 的任何东西,例如将流式传输 StringBuffer 的StringBufferInputStream 。


查看完整回答
反对 回复 2023-05-17
  • 2 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信