如何关闭AWS S3读取流(AWSJavaScriptSDK)

时间:2018-06-12 11:09:52

标签: node.js amazon-web-services amazon-s3

我有一个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对象)?

我尝试了记录herereadStream.destroy(),但它不起作用。

1 个答案:

答案 0 :(得分:0)

我正在寻找类似情况的解决方案,并遇到了这个问题。

有一个AWS Request abort method documented here,可让您在不接收所有数据的情况下取消请求(这与节点的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...
  });

可能是错误的,但就我而言-我正在获取数据,并且想在达到某一点时停止流传输(即,在文件中找到特定数据,这只是检查它是否是唯一的问题)存在-我什么都不需要了。

以上内容同样适用于requestnode-fetch模块。