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

标签 ajax node.js azure sails.js azure-web-app-service

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

是的,我知道maxAllowedContentLength,但不知道,这不是解决方案。它最多只能达到 4GB,这是可悲的 - 即使是 HDR 环境贴图现在也很容易超过这个数量。我需要让用户能够上传最大 150GB 的文件。然而,当 azure web 应用程序收到多部分请求时,它似乎会将其缓冲到内存中,直到达到字节或秒的某个阈值(一旦达到该阈值,如果我的连接速度很慢,它会返回 404.13 或 502),然后再运行我的任何服务器逻辑。

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

郑重声明:我在后端使用 Sails.js 和 Skipper正在处理到 Azure Blob 服务的流管道。无论文件大小如何,本地主机显然都可以正常工作。我在 MSDN 论坛上复制了这个问题,但速度一如既往地慢。你可以去那里看看我到目前为止发现了什么:enter link description here

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

有什么办法可以实现这个功能吗?我只是想让它让我的服务器端逻辑处理数据流,而不需要缓冲该死的东西。

最佳答案

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

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

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

更多详细信息和示例 Ajax 代码可在 this blog post 中找到。来自 Azure 存储团队。

关于ajax - 如何通过 Azure 网站上的 Node.js 应用程序将大文件上传流传输到 Azure Blob 存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33701291/

相关文章:

c# - 使用集合的 Azure 移动服务查询包含

javascript - 如何创建一个简单的获取表单来创建动态路由,具体取决于搜索字段的值(MONGODB 和 Node.js)

jquery在多个ajax调用上显示加载器

javascript - 在ajax成功的单独页面中打印每个循环记录

javascript - 通过 Ajax 内联调用 PHP 文件中的操作

javascript - 如何在 React 中向其他组件传递值

javascript - 如何使用给定 ID 进行快速重定向?

c# - Publishesettings 告诉该位置是保留的系统名称或磁盘不可写?

powershell - 获取 Azure 数据工厂中管道的状态

javascript - 点击发送数据