如何通过Azure网站上的Node.js应用程序将大文件stream上传到Azure Blob存储?

我正在使用Azure媒体服务和Node.js构buildvideo服务,但是直到现在,一切都变得很好,但是当我尝试将应用程序部署到Azure Web Apps进行托pipe时,任何大型文件都将失败,并显示404.13错误。

是的,我知道maxAllowedContentLength而不是,这不是一个解决scheme。 它只能达到4GB,这是可悲的 – 即使HDR环境地图可以轻松超过这个数量。 我需要使用户能够上传最大150GB的文件。 然而,当azurenetworking应用程序接收到一个多部分的请求,它似乎缓冲到内存,直到某个阈值的任何一个字节或几秒钟(如果我的连接速度慢,返回给我一个404.13或502)在运行我之前服务器逻辑。

我在服务器代码中尝试了Transfer-Encoding: chunked头文件,但即使这样做会有所帮助,因为Web Apps不会让代码运行,这实际上并不重要。

logging:我在后端使用Sails.js,并且Skipper正在处理到Azure Blob服务的streampipe道。 本地主机显然工作得很好,不pipe文件大小。 我在MSDN论坛上重复了这个问题,但是这些问题一直很慢。 你可以去那里看看我发现到目前为止: 在这里input链接描述

客户端我使用Ajax FormData来序列化字段(一个文本字段和一个文件)并发送它们,使用progress甚至跟踪上传进度。

有没有办法使这项工作? 我只是希望它让我的服务器端逻辑处理数据stream,而不会缓冲stream血的事情。

而不是通过您的Web应用程序运行所有这些数据,最好是直接将您的客户端上传到Azure Blob存储帐户中的容器。

您将需要启用Azure存储帐户上的CORS来支持此操作。 然后,在您的Web应用程序中,当用户需要上传数据时,您将为您希望客户端上传的存储帐户容器生成一个SAS令牌,并将其返回给客户端。 客户端然后将使用SAS令牌将file upload到您的存储帐户。

在后端,您可以启动一个web作业,在file upload完成后,对文件进行任何处理。

Azure存储团队的此博客文章中提供了更多详细信息和样例ajax代码。