我有一个 AWS S3 对象和一个在其上创建的读取流,如下所示:
const s3 = new AWS.S3();
const readStream = s3
.getObject(params)
.createReadStream()
.on('error', err => {
// do something
});
现在,当流在 120 秒后未读到最后(例如,流被客户端中止)时,error
事件被触发:TimeoutError: Connection timed out after 120000ms
如何关闭流(或整个 S3 对象)?
我尝试了记录在案的 readStream.destroy()
here , 但它不起作用。
最佳答案
我正在寻找类似案例的解决方案并遇到了这个话题。
有一个AWS Request abort
method documented here这允许您在没有收到所有数据的情况下取消请求(这与 Node 的 http 请求的概念类似)。
您的代码应该看起来像这样:
const s3 = new AWS.S3();
const request = s3.getObject(params);
const readStream = request.createReadStream()
.on('error', err => {
request.abort(); // and do something else also...
});
这可能是错误的,但在我的情况下 - 我正在获取数据并且我想在到达某个点时停止流式传输(即在文件中找到特定数据,这只是检查它是否存在的问题存在 - 我不需要任何其他东西)。
以上内容也适用于 request
和 node-fetch
模块。
关于node.js - 如何关闭 AWS S3 读取流 (AWSJavaScriptSDK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50815714/