【问题标题】:How can I stream a large Azure blob as chunks to clients using web API?如何使用 Web API 将大型 Azure blob 作为块流式传输到客户端?
【发布时间】:2021-10-21 07:02:26
【问题描述】:

我的一些用户需要能够使用我的 Web API 端点下载非常大的 zip 文件。其中一些文件的大小可能超过 1GB。文件本身在 Azure 中存储为 blob。显然加载整个流将不起作用,尤其是对于多个用户,因为我很可能会用完内存。所以我需要以某种方式分块发送。

谁能解释/告诉我这将如何使用 Web API 工作?我不知道该怎么写。或者关于如何以可扩展的方式实现我的目标的任何其他更好的建议?

这是我拥有的一个端点:

public async Task<IHttpActionResult> GetFile(int fileId)
{
    // TODO: somehow stream chunks from azure through to the client's browser...
}

Web 浏览器用于通过 Web API 发起请求。我想在我的 HTML 页面上简单地包含一个锚标记,用户可以单击该标记来下载文件:

<a href='localhost/File?fileId=3'>Click here to download</a>

【问题讨论】:

  • 您能告诉我们一些有关您的 Web API 客户端(主要是用户代理)的信息吗?它是基于浏览器的应用程序还是桌面/移动应用程序?
  • 对不起,我应该更清楚。正在通过网络浏览器访问网络 API。简单的锚标记。

标签: http azure asp.net-web-api streaming azure-blob-storage


【解决方案1】:

您应该通过 Azure 存储客户端库直接流式传输 blob。您还可以进行 WebAPI 调用以获取要下载的 blob 的 SAS uri,然后将该 URI 包含在您的锚选项卡中。 如果 Uri 构造正确,则用户单击链接后将立即开始下载。这样您就不必担心 Web api 的内存问题,因为内容是直接从 Azure 存储流式传输的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 2017-04-18
    • 2015-08-23
    • 2012-02-10
    • 2018-08-13
    • 2015-11-29
    相关资源
    最近更新 更多