繁体   English   中英

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

[英]How to pipe upload stream of large files to Azure Blob storage via Node.js app on Azure Websites?

我正在使用Azure媒体服务和Node.js构建视频服务,直到现在一切都进行得很顺利,但是当我尝试将应用程序部署到Azure Web Apps进行托管时,任何大文件都会失败,并出现404.13错误。

是的,我知道maxAllowedContentLength ,但不是,那不是解决方案。 它最多只能达到4GB,这是可悲的-如今,即使是HDR环境地图也可以轻松超过该数量。 我需要使用户能够上传最大150GB的文件。 但是,当azure Web应用程序收到多部分请求时,它似乎将其缓冲到内存中,直到某个阈值(无论是字节还是数秒)为止(达到此阈值时,如果我的连接很慢,它将返回404.13或502),然后再运行任何服务器逻辑。

我尝试在服务器代码中使用Transfer-Encoding: chunked块头,但是即使那样会有所帮助,因为Web Apps不允许代码运行,所以实际上并不重要。

记录一下:我在后端使用Sails.js, Skipper正在处理通往Azure Blob Service的流管道。 无论文件大小如何,Localhost显然都可以正常工作。 我在MSDN论坛上重复了这个问题,但是它们和以前一样慢。 您可以去那里查看到目前为止我发现的内容: 在此处输入链接描述

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

有什么办法可以使这项工作吗? 我只希望它可以让我的服务器端逻辑处理数据流,而不用缓冲这些血腥的事情。

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

您将需要在Azure存储帐户上启用CORS以支持此功能。 然后,在Web应用程序中,当用户需要上载数据时,您将为您要客户端上载到的存储帐户容器生成SAS令牌,然后将其返回给客户端。 然后,客户端将使用SAS令牌将文件上传到您的存储帐户中。

在后端,您可以启动网络作业,以在文件上传后对文件进行所需的任何处理。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM