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 文档似乎没有进一步说明:
- DownloadAsync() - 标记为不可浏览,但事实上的方式,基于所有 samples/blogs
- DownloadStreamingAsync()
- DownloadContentAsync()
- DownloadToAsync()
- OpenReadAsync()
此外,如果尝试执行一些其他操作,而不是通过 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>();
我有使用 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 文档似乎没有进一步说明:
- DownloadAsync() - 标记为不可浏览,但事实上的方式,基于所有 samples/blogs
- DownloadStreamingAsync()
- DownloadContentAsync()
- DownloadToAsync()
- OpenReadAsync()
此外,如果尝试执行一些其他操作,而不是通过 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>();