如何通过 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 构建视频服务
到现在一切都进行 semi-fine,但是当我尝试将应用程序部署到 Azure Web 应用程序进行托管时,任何大文件都会失败并出现 404.13 错误。
是的,我知道 maxAllowedContentLength
但不知道,这不是解决方案。它最多只能达到 4GB,这很可怜——如今即使是 HDR 环境贴图也很容易超过这个数量。我需要允许用户上传最大 150GB 的文件。然而,当 azure web 应用程序收到一个多部分请求时,它似乎将其缓冲到内存中,直到达到某个字节或几秒的阈值(一旦达到,它 returns 我是 404.13 或 502 如果我的连接很慢)之前运行宁我的任何服务器逻辑。
我在服务器代码中尝试了 Transfer-Encoding: chunked
header,但即使这会有所帮助,因为 Web 应用程序不允许代码 运行,这实际上并不重要.
备案:我在后端使用 Sails.js 和 Skipper is handling the stream piping to Azure Blob Service. Localhost obviously works just fine regardless of file size. I made a duplicate of this question on MSDN forums, but those are as slow as always. You can go there to see what I have found so far: enter link description here
客户端我正在使用 Ajax FormData
序列化字段(一个文本字段和一个文件)并发送它们,甚至使用 progress
来跟踪上传进度。
有什么方法可以让它工作吗?我只是想让它让我的服务器端逻辑处理数据流,而不缓冲该死的东西。
与其 运行 所有这些数据都通过您的 Web 应用程序,您最好让您的客户端直接上传到您的 Azure blob 存储帐户中的容器。
您需要在您的 Azure 存储帐户上启用 CORS 以支持此功能。然后,在您的 Web 应用程序中,当用户需要上传数据时,您将为您希望客户端上传到的存储帐户容器生成一个 SAS 令牌,并将其 return 发送给客户端。然后,客户端将使用 SAS 令牌将文件上传到您的存储帐户。
在后端,您可以启动 Web 作业以在文件上传后执行您需要对其执行的任何处理。
Azure 存储团队 this blog post 提供了更多详细信息和示例 ajax 代码。
我正在使用 Azure 媒体服务和 Node.js 构建视频服务 到现在一切都进行 semi-fine,但是当我尝试将应用程序部署到 Azure Web 应用程序进行托管时,任何大文件都会失败并出现 404.13 错误。
是的,我知道 maxAllowedContentLength
但不知道,这不是解决方案。它最多只能达到 4GB,这很可怜——如今即使是 HDR 环境贴图也很容易超过这个数量。我需要允许用户上传最大 150GB 的文件。然而,当 azure web 应用程序收到一个多部分请求时,它似乎将其缓冲到内存中,直到达到某个字节或几秒的阈值(一旦达到,它 returns 我是 404.13 或 502 如果我的连接很慢)之前运行宁我的任何服务器逻辑。
我在服务器代码中尝试了 Transfer-Encoding: chunked
header,但即使这会有所帮助,因为 Web 应用程序不允许代码 运行,这实际上并不重要.
备案:我在后端使用 Sails.js 和 Skipper is handling the stream piping to Azure Blob Service. Localhost obviously works just fine regardless of file size. I made a duplicate of this question on MSDN forums, but those are as slow as always. You can go there to see what I have found so far: enter link description here
客户端我正在使用 Ajax FormData
序列化字段(一个文本字段和一个文件)并发送它们,甚至使用 progress
来跟踪上传进度。
有什么方法可以让它工作吗?我只是想让它让我的服务器端逻辑处理数据流,而不缓冲该死的东西。
与其 运行 所有这些数据都通过您的 Web 应用程序,您最好让您的客户端直接上传到您的 Azure blob 存储帐户中的容器。
您需要在您的 Azure 存储帐户上启用 CORS 以支持此功能。然后,在您的 Web 应用程序中,当用户需要上传数据时,您将为您希望客户端上传到的存储帐户容器生成一个 SAS 令牌,并将其 return 发送给客户端。然后,客户端将使用 SAS 令牌将文件上传到您的存储帐户。
在后端,您可以启动 Web 作业以在文件上传后执行您需要对其执行的任何处理。
Azure 存储团队 this blog post 提供了更多详细信息和示例 ajax 代码。