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

我有一些对象集,想将这些数据作为 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);

在此先感谢您的帮助和时间。


慕少森
浏览 146回答 2
2回答

波斯汪

你可以这样做:创建 csv 输出流:(参考:)要添加的依赖项(使用的示例请参考上面的链接):<dependency>&nbsp; &nbsp; <groupId>net.sourceforge.javacsv</groupId>&nbsp; &nbsp; <artifactId>javacsv</artifactId>&nbsp; &nbsp; <version>2.0</version> </dependency>代码 :public void createCsv() throws Exception {&nbsp; &nbsp; ByteArrayOutputStream stream = new ByteArrayOutputStream();&nbsp; &nbsp; CsvWriter writer = new CsvWriter(stream, ',', Charset&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .forName("ISO-8859-1"));&nbsp; &nbsp; writer.setRecordDelimiter(';');&nbsp; &nbsp; // WRITE Your CSV Here&nbsp; &nbsp; //writer.write("a;b");&nbsp; &nbsp; writer.endRecord();&nbsp; &nbsp; writer.close();&nbsp; &nbsp; stream.close();&nbsp; &nbsp; }通过字节数组将输出流转换为输入流:InputStream inputStream = new ByteArrayInputStream(stream.toByteArray());将此流传递给 S3 PutObjectRequest

MMMHUHU

InputStream是一个抽象类(也许应该是一个接口)。您可以使用任何 InputStream 的子类或可以生成 InputStream 的任何东西,例如将流式传输 StringBuffer 的StringBufferInputStream 。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java