java - 我们可以在 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);
提前感谢您的帮助和时间。
解决方案
你可以这样做:
- 创建 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
推荐阅读
- google-apps-script - 如何使谷歌电子表格的所有工作表在左上角显示 A1?
- msbuild - 无法使用 msbuild 进行 Web 部署,但可以使用 Visual Studio
- javascript - 无法解析对象数组
- python - 在OpenCV2中找到最接近图像中心的轮廓
- laravel - Laravel 中的可填充字段是否有可能被黑客入侵?
- javascript - 阅读文件后如何取消交易?
- python - 基于 facet 在 Seaborn FacetGrid 中自定义标题
- javascript - 使用 Redux 的私有路由
- c++ - C++ - 整数解析
- python-3.x - Pandas to_datetime 解析奇怪格式的日期