将大型文件上传到具有请求大小限制的Node.JS服务器

时间:2019-01-15 17:34:14

标签: javascript node.js file-upload chunked

情况:

我有一个Node.JS服务器。 NGINX设置为将请求的大小限制为5MB。

我需要从运行在浏览器中的客户端向服务器上载大文件(〜15MB)。

有3个服务器实例在没有共享内存/文件系统的情况下运行。

我所做的事情:

我使用了一些库将文件分解为大块(<5MB),然后将它们发送到服务器。在将最后一个块成功发送到服务器后,客户端调用服务器端点以发出信号通知完成,然后合并块。当我有一个服务器实例运行时,此方法有效。由于负载平衡等原因,每个发送块的请求都可能由服务器的不同实例处理。因此,这些块可能无法正确合并。

我想到的解决方案:

最终的解决方案(在我看来)将是如何仅在一个请求中将块流式传输到服务器,该请求仅由一个服务器实例处理。

Stream API仍处于试验阶段。我想尝试,但没有找到一个好的榜样。我听说客户端的Stream API与Node.JS上的流不同,还需要做更多的事情。

我对HTTP标头的Transfer-Encoding: chunked做了一些研究。有人说发送大文件很好,但是我没有找到一个很好的例子来实现这一目标。

我还想到了WebSocket(甚至Socket.io)与服务器实例建立连接并发送块。但是,有些阅读告诉我,WebSocket并不是发送大文件的好方法。

问题:

如何实现以最有效的方式将大文件发送到一个服务器实例的目标?

0 个答案:

没有答案