如何使用Web API将大型Azure blob作为块传输到客户端?

时间:2015-08-31 02:25:18

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

我的用户需要能够使用我的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>

1 个答案:

答案 0 :(得分:1)

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