【发布时间】:2022-02-14 06:38:52
【问题描述】:
我正在尝试将大型 csv 文件中的数据流式传输到 readline。我尝试将 readStream 从 s3 管道传输到 readline 输入,但是我遇到了一个错误,S3 只允许连接保持打开一段时间。
我正在像这样从 s3 创建流:
import * as AWS from 'aws-sdk';
import {s3Env} from '../config';
export default async function createAWSStream(): Promise<SmartStream> {
return new Promise((resolve, reject) => {
const params = {
Bucket: s3Env.bucket,
Key: s3Env.key
};
try {
const s3 = new AWS.S3({
accessKeyId: s3Env.accessKey,
secretAccessKey: s3Env.secret
});
s3.headObject(bucketParams, (error, data) => {
if (error) {
throw error
};
const stream = s3.getObject(params).createReadStream();
resolve(stream);
})
} catch (error) {
reject(error);
}
})
}
然后我将它输入到 readline 中:
import * as readline from 'readline';
import createAWSStream from './createAWSStream';
export const readCSVFile = async function(): Promise<void> {
const rStream = await createAWSStream();
const lineReader = readline.createInterface({
input: rStream
});
for await (const line of lineReader) {
// process line
}
}
我发现 s3 连接的超时设置为 120000 毫秒(2 分钟)。我尝试简单地提高超时,但是我遇到了来自 HTTPS 连接的更多超时问题。
如何以正确的方式从 AWS S3 流式传输数据,而无需将大量超时设置为某个非常大的时间范围?
【问题讨论】:
标签: node.js typescript amazon-s3 streaming