Azure Blob Storage SDK v12 - BlobClient DownloadAsync消失了?

acruukt9  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(342)

我有一个生产代码,它使用BlobClient.DownloadAsync()方法从Azure Blob Storage下载一个文件,使用Azure.Storage.Blobs nuget包v12.8,它似乎工作得很好。然而,我升级了nuget包,并准备编写一些新代码来处理zip文件,这也依赖于下载以提取zip......但注意到Storage SDK的最新API中的一些变化。
除了几乎每一个来自微软的样本,以及来自互联网,有点不正确,因为该方法将返回的BlobDownloadInfo Package 到Response<T>对象中-迫使您首先调用.Value,他们似乎也使用上述方法下载blob文件-但我再也找不到通过Intellisense的方法。
当我查看将我带到BlobBaseClient.DownloadAsync()方法的源代码时,我看到它用[EditorBrowsable(EditorBrowsableState.Never)]装饰,这意味着这个API可能会通过隐藏它来慢慢地从开发人员中删除,但不会破坏现有代码或标记为Obsolete。但我找不到任何文章/问题/文档肯定指向这一点。这就是它的样子:

话虽如此.....如果目标是通过ASP.NET控制器操作(REST端点)将文件“流式传输”到客户端(如浏览器等),那么使用.NET SDK从Azure Blob存储(块Blob)以异步方式下载文件的方式是什么?(不保存到服务器上的本地文件)?
BlobClient上似乎有几个可用的“下载”API,但它们的文档有些模糊或模棱两可,MS文档似乎没有进一步澄清:

  • DownloadAsync()-基于所有示例/博客,标记为不可浏览,但实际上是不可浏览
  • System. out. println()
  • System. out. println()
  • System. out. println()
  • OpenReadAsync()

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

oyjwcjzk

oyjwcjzk1#

对于其他试图弄清楚如何将文件从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>();

相关问题