【问题标题】:How to pipe upload stream of large files to Azure Blob storage via Node.js app on Azure Websites?如何通过 Azure 网站上的 Node.js 应用将大文件的上传流通过管道传输到 Azure Blob 存储?
【发布时间】:2015-11-14 12:31:42
【问题描述】:

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

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

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

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

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

有什么方法可以让这个工作吗?我只是想让它让我的服务器端逻辑处理数据流,而不是缓冲血腥的东西。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    Azure 存储团队的this blog post 提供了更多详细信息和示例 ajax 代码。

    【讨论】:

    • 似乎是目前唯一的解决方案,但我想看看是否有任何微软员工对此有什么要说的。以及这是否可以通过 Web 应用程序实现。没有缓冲的整个数据流确实是 2015 年的基本功能,看到 Web 应用程序不支持这一点非常令人失望。因此,如果它以某种方式发生而我只是做错了,我希望看到解决方案,我相信很多其他人也会这样做。与此同时,我会按照你的方式构建它(这意味着我也会废弃我所有代码的 30%)。我绝不会推荐 Azure 作为 Node 主机。
    • (如,来自 Web 应用部门的 Microsoft 员工 XD)
    • 好的,我已经实现了这个解决方案。它有效,尽管我不得不扔掉很多以前的工作。我想这是一次学习经历……
    猜你喜欢
    • 2020-07-12
    • 1970-01-01
    • 2015-06-13
    • 2022-01-12
    • 1970-01-01
    • 2022-01-12
    • 2020-03-02
    • 2020-09-21
    • 1970-01-01
    相关资源
    最近更新 更多