node.js - 如何关闭 AWS S3 读取流 (AWSJavaScriptSDK)

标签 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 对象)?

我尝试了记录在案的 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...
  });

这可能是错误的,但在我的情况下 - 我正在获取数据并且我想在到达某个点时停止流式传输(即在文件中找到特定数据,这只是检查它是否存在的问题存在 - 我不需要任何其他东西)。

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

关于node.js - 如何关闭 AWS S3 读取流 (AWSJavaScriptSDK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50815714/

相关文章:

node.js - 一个或多个参数值无效 : dynamodb

python - 使用 boto3 分段上传

json - 解码并附加到数组 go

c# - 如何在 S3 的 response-content-disposition header 中使用 unicode 字符?

node.js readline - 写入数据出现在输入中

javascript - 为什么我无法获取数组长度

ruby-on-rails - Engine Yard Rails 应用程序 - 在 Elastic Load Balancer (ELB) 处终止 SSL 并传递 X-Forwarded-Proto http header

javascript - 如何从 nodejs aws s3 getObject 回调数据中检索元数据?

node.js - 如何使用 Node js 版本 0.6.18 输出 twitter api 响应

amazon-web-services - 我们如何控制联合用户启动的 EC2 实例数量?