Azure Blob 存储 SDK v12 - BlobClient DownloadAsync 消失了吗?

Azure Blob Storage SDK v12 - BlobClient DownloadAsync gone?

我有使用 BlobClient.DownloadAsync() 方法使用 Azure.Storage.Blobs nuget 包 v12.8 从 Azure Blob 存储下载文件的生产代码,它似乎工作正常。但是,我升级了 nuget 包并准备编写一些新代码来处理 zip 文件,这也依赖于下载以提取 zip ...但是注意到最新的 APIs 的一些变化存储 SDK。

除了来自 Microsoft 和互联网的几乎所有示例之外,还有一点不正确,因为该方法将返回的 BlobDownloadInfo 包装到 Response<T> 对象中 - 迫使您调用.Value 首先,他们似乎也使用上述方法下载 blob 文件 - 但我无法再通过 Intellisense 找到该方法。

当我查看将我带到 BlobBaseClient.DownloadAsync() 方法的源代码时,我看到它用 [EditorBrowsable(EditorBrowsableState.Never)] 装饰,暗示这个 API 可能会通过隐藏慢慢被带走它来自开发人员,但不会破坏现有代码或标记为 Obsolete。但我找不到任何 articles/issues/docs 可以肯定地指向那个。这是它的样子:

话虽这么说......如果目标是使用 .NET SDK 从 v12.9 开始以异步方式从 Azure Blob 存储(块 blob)下载文件的方式是什么是通过 ASP.NET 控制器操作(REST 端点)将其“流”到浏览器等客户端(不保存到服务器上的本地文件)?

BlobClient 上似乎有几个可用的“下载”API,但它们的文档有些含糊或模棱两可,而且 MS 文档似乎没有进一步说明:

此外,如果尝试执行一些其他操作,而不是通过 REST API 下载到浏览器客户端,例如,如果您正在解压缩 blob 文件并且提取的文件也将进入blob 存储,最好不要下载,而是通过 OpenReadAsync()?

打开它

对于任何其他试图弄清楚如何将 Azure 博客存储中的文件 stream/download 文件转换为对象的人来说,OP Github issue 是我遇到的最好的文档。

总之主要使用方法:

DownloadContentAsync() - preferred way to fetch blobs that fit in memory
DownloadStreamingAsync() - stream when bandwidth adequate (otherwise OpenReadAsync)
OpenReadAsync() - fetches buffered chunks when bandwidth inadequate or consumer slow (otherwise DownloadStreamingAsync)

不使用:

DownloadAsync() - replaced by DownloadStreamingAsync

当您只想从 blob 存储下载文件时:

DownloadToAsync() - downloads a blob using parallel requests, and writes the content to destination

DownloadContentAsync 非常有用

对于 JSON 文件和其他小 blob,这可以方便地将数据作为 BinaryData 提供,使您可以轻松检索常用的基元(字符串、流、字节)。

示例:

BlobContainerClient containerClient = new BlobContainerClient(_settings.ConnectionString, _settings.ContainerName);
    
var blobClient = containerClient.GetBlobClient($"{folderName}/{fileName}");
    
BlobDownloadResult download = await blobClient.DownloadContentAsync();
    
MyJSONData json = download.Content.ToObjectFromJson<MyJSONData>();