Javascript 通过流将数据块写入S3文件,而不是创建临时文件Node.js

Javascript 通过流将数据块写入S3文件,而不是创建临时文件Node.js,javascript,node.js,amazon-web-services,amazon-s3,Javascript,Node.js,Amazon Web Services,Amazon S3,我尝试将CSV格式的数据块写入AmazonS3中的文件,而不是通过WriteStream写入临时文件,然后在该文件上创建ReadStream并将其发送到S3。我的程序从数据库中提取数据行,对其进行处理,然后使用S3的upload()api将每一行格式化为CSV格式 如何跳过创建临时文件然后将文件作为流传递给AWS的步骤?我希望能够直接流式传输CSV信息块。通过实现Readable类并实现S3 upload消费的自定义read()函数解决了这一问题。通过实现Readable类并实现自定义read(

我尝试将CSV格式的数据块写入AmazonS3中的文件,而不是通过WriteStream写入临时文件,然后在该文件上创建ReadStream并将其发送到S3。我的程序从数据库中提取数据行,对其进行处理,然后使用S3的upload()api将每一行格式化为CSV格式


如何跳过创建临时文件然后将文件作为流传递给AWS的步骤?我希望能够直接流式传输CSV信息块。

通过实现Readable类并实现S3 upload消费的自定义read()函数解决了这一问题。

通过实现Readable类并实现自定义read()解决了这一问题S3上传功能,用于消费

创建可读流并将CSV记录推送到那里。使用S3 client upload()选项,其中主体类型为ReadableStream。不过,每个迭代只包含一个Csv文件。循环中的所有迭代完成后,写入流关闭,生成1个CSV文件。我试着按照你说的做了,创建了一个可读的文件,并将块推给它,但可能我做得不对。你能提供一些例子吗?创建一个可读流并将你的CSV记录推送到那里的可能的副本。使用S3 client upload()选项,其中主体类型为ReadableStream。不过,每个迭代只包含一个Csv文件。循环中的所有迭代完成后,写入流关闭,生成1个CSV文件。我试着按照你说的做了,创建了一个可读的文件,并将块推给它,但可能我做得不对。你能提供一些例子吗?可能的重复你能举个例子吗?你能举个例子吗?
let recordsCSVFormatted;
let offset = 0;
const batchSize = 500;
const writer = fs.createWriteStream('./someFile.csv')

do {
  recordsCSVFormatted = await getRecords(limit, offset); // gets records from DB, formats it in CSV string
  writer.write(recordsCSVFormatted);
  offset += batchSize;
} while (typeof recordsCSVFormatted === 'undefined' || (recordsCSVFormatted && recordsCSVFormatted.length))

const reader = fs.createReadStream('./someFile.csv');

// just assume here that Key and Bucket are provided in upload, they are in actual code
await new AWS.S3({...s3Opts}).upload({Body: reader}).promise() // pass the readable in here for AWS