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 停顿的主要内容,如果未能解决你的问题,请参考以下文章
Node.js:检测到一个文件,用 fs.createWriteStream() 打开,被删除
我可以从 fs.createWriteStream() 获取缓冲区吗?
使用 Fetch API 和 fs.createWriteStream 对文件进行流式响应