【问题标题】:Write csv file to S3 Bucket without storing it locally将 csv 文件写入 S3 存储桶而不将其存储在本地
【发布时间】:2020-10-07 06:43:22
【问题描述】:

之前我创建了一个 .csv 文件并将其存储在运行应用程序的本地系统中,然后我将其发送到 AWS S3 Bucket。

现在我不想在应用程序端创建任何文件。我想直接将我的数据作为 .csv 文件写入 S3 Bucket,这可能吗?
如果可能,请指导我如何做到这一点。

【问题讨论】:

  • 不确定这是否可能。 S3 是对象存储,而不是文件存储。因此,您不能在其中“打开”文件并开始追加行。也许您可以使用 fuse medium.com/tensult/… 将 int 挂载为文件系统
  • 我知道 S3 是对象存储。我不知道谁否决了我的问题,但有一种方法可以将我们的数据写入 .csv 文件的 S3 存储桶中。我们只需要将数据作为 InputStream 发送。

标签: amazon-web-services amazon-s3


【解决方案1】:

有一种方法可以实现这一点,我们必须将数据作为 InputStream 发送
就我而言,我做了以下更改:
[1]我将我的 Bean 类更新为 Override toString() 方法,如下所示

public class Employee{
String Id;
String employeeNo; 
String name;
//get and set

@Override
public String toString() {
    return "{"+ Id +","+ employeeNo + ","+ name + "}";
}

[2]我取出数据列表,转换成List

List<Employee> employeeList=//get employee list
List<String[]> csvData = toStringArray(employeeList);

我的 toStringArray() 将返回 List

private List<String[]> toStringArray(List<Employee> employeeList) {
List<String[]> records = new ArrayList<String[]>();
// adding header to csv
records.add(new String[] { "EmployeeId", "EmployeeNo", "Name"});
// add data to csv
Iterator<Employee> emp = employeeList.iterator();
while (emp.hasNext()) {
Employee data = emp.next();
records.add(new String[] { emp.getId(), emp.getEmployeeNo(), emp.getName() });
}
return records;
}

[3] 现在我将此数据转换为字符串

String strCsvData=writeCsvAsString(csvData);

我的 writeCsvAsString() 方法是

 public String writeCsvAsString(List<String[]> csvData) {
        StringWriter s = new StringWriter();
        CSVWriter writer = new CSVWriter(s);
        writer.writeAll(csvData);
        try {
            writer.close();
        } catch (IOException e) {
        }
        String finalString = s.toString();
        logger.debug("Actual data:- {}", finalString);
        return finalString;
  }

现在我将此字符串转换为 InputStream 并将其发送到带有 contentType 元数据的 S3 存储桶 "text/csv"

InputStream targetStream = new ByteArrayInputStream(strCsvData.getBytes());

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    相关资源
    最近更新 更多