You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure BlobClient返回非可查找流,改用OpenRead是否有明显弊端?

问题:Azure Blob存储文件下载接口的代码改动是否存在明显弊端?

原实现代码

我原本通过以下端点提供文件下载服务:

[HttpGet("Files/{id}")]
[HttpHead("Files/{id}")]
public IActionResult GetFile(Guid id)
{
    var blob = Container.GetBlobClient(id.ToString().ToLower()); // Container是BlobContainerClient实例
    var download = blob.Download();

    return File(download.Value.Content, "mime-type", "file name", enableRangeProcessing: true);
}

存在的问题

download.Value.Content是一个非可查找流,这导致Azure返回的响应缺少content-length或accept-ranges标头。大文件下载时,浏览器无法获取文件大小,也就无法显示下载进度百分比。

修改后的代码

我打算把代码改成这样:

[HttpGet("Files/{id}")]
[HttpHead("Files/{id}")]
public IActionResult GetFile(Guid id)
{
    var blob = Container.GetBlobClient(id.ToString().ToLower());
    var stream = blob.OpenRead(new BlobOpenReadOptions(allowModifications: false));

    return File(stream, "mime-type", "file name", enableRangeProcessing: true);
}

修改后返回的是可查找流,能生成正确的响应标头,解决了进度显示的问题。

其他尝试的异常情况

我还试过blob.DownloadStreaming和blob.DownloadTo方法,本地测试正常,但部署到Azure后会抛出如下异常:

Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

核心疑问

我使用的是Azure.Storage.Blobs, Version=12.14.1.0版本,想知道:

  1. 上述改用OpenRead的改动是否存在明显弊端?
  2. 为什么Download()方法会返回非可查找流?

内容的提问来源于stack exchange,提问作者Brad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 04:46:15