fs.createWriteStream 停顿

Posted

技术标签:

【中文标题】fs.createWriteStream 停顿【英文标题】:fs.createWriteStream stalls 【发布时间】:2021-08-04 06:25:25 【问题描述】:

我正在使用 npm 包 busboy 来解析多部分表单请求和写入流以将发送的文件写入磁盘。

这适用于小文件,但是当我尝试使用较大的文件 (7MB) 时,似乎只有大约 5MB 被写入磁盘,然后似乎事情停止了,它永远不会完成,也没有抛出错误。这在本地有效,但在 ECS 上运行时会出现问题。

节点服务器在 ECS 上的 docker 容器中运行

  pipeline(fileStream, fs.createWriteStream(filePath), (err) => 
    if (err) 
      console.log("Pipeline failed", err);
     else 
      console.log("Pipleline complete");
    
  );

有什么想法吗??

【问题讨论】:

你的容器前面有东西吗? API网关?负载均衡器? 有一个应用负载均衡器 您能否将错误侦听器附加到写入流本身?不确定它有什么不同,但很奇怪它挂起没有消息。 我确实这样做了,在读取流中也是如此! 没有 API 网关对吗? 【参考方案1】:

我最近通过启用访问日志来查找“幕后”的 HTTP 状态代码来解决这个问题。在我的例子中,它是一个 413 状态码。

有几个步骤可以设置它,并且它会不时更改。在此处查看文档以了解当前的步骤和配置:https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#enable-access-logging

【讨论】:

以上是关于fs.createWriteStream 停顿的主要内容,如果未能解决你的问题,请参考以下文章

fs.createwritestream 不是函数

Node.js:检测到一个文件,用 fs.createWriteStream() 打开,被删除

我可以从 fs.createWriteStream() 获取缓冲区吗?

使用 Fetch API 和 fs.createWriteStream 对文件进行流式响应

node.js 中与 fs.createWriteStream 关​​联的事件

node.js fs.createWriteStream 创建文件,但无法正确写入