gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:51:32 28 4
gpt4 key购买 nike

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

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

当我查看源代码时,我看到了 BlobBaseClient.DownloadAsync()方法,我看到它用 [EditorBrowsable(EditorBrowsableState.Never)] 装饰,这意味着这个 API 可能会通过向开发人员隐藏它而慢慢被拿走,但不会破坏现有代码或标记为 Obsolete 。但我找不到任何可以肯定指出这一点的文章/问题/文档。看起来像这样:

decompiled BlobBaseClient.DownloadAsync()

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

BlobClient 上似乎有几个可用的“下载”API ,但他们的文档有些模糊或不明确,并且 MS 文档似乎没有进一步澄清:

  • DownloadAsync() - 标记为不可浏览,但基于所有示例/博客,这是事实上的方式
  • DownloadStreamingAsync()
  • DownloadContentAsync()
  • DownloadToAsync()
  • OpenReadAsync()

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

最佳答案

对于其他想要了解如何将文件从 Azure Blob 存储流式传输/下载到对象的人来说,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>();

关于.net - Azure Blob 存储 SDK v12 - BlobClient DownloadAsync 消失了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68070143/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com