在 Azure SDK v12 中迭代 blob

Iterating through blobs in Azure SDK v12

我正在升级 Web 应用程序以使用 Azure SDK v 12.10

在此之前,我将虚拟路径中的所有 blob 从容器中抓取到列表中并遍历它们。

var results = await blobContainer.
                ListBlobsSegmentedAsync("publicfiles/images/" + customer.AzureFolderName, true, BlobListingDetails.All, 100, blobContinuationToken, null, null);
            // Get the value of the continuation token returned by the listing call.
            blobContinuationToken = results.ContinuationToken;

            foreach (var item in results.Results)
            {
                var filename = GetFileNameFromBlobUri(item.Uri, customer.AzureFolderName);
                var img = new EvaluationImage
                {
                    ImageUrl = item.Uri.ToString(),
                    ImageCaption = GetCaptionFromFilename(filename),
                    IsPosterImage = filename.Contains("poster"),
                    ImagesForCompany = customer.CompanyName
                };

                images.Add(img);
            }

我通过谷歌搜索可以找到如何在新 SDK 中执行此操作,结果如下

await foreach (BlobItem blob in blobContainer.GetBlobsAsync(BlobTraits.None, BlobStates.None, $"publicfiles/images/{customer.AzureFolderName}"))

问题是“blob”变量 (BlobItem) 的可用属性很少,例如,我需要以前可用的 Uri。先前版本中的“blob”变量具有大量可用的属性。是否有一些其他类型(不是 BlobItem)具有我在搜索中没有找到的这些属性?

我在 BlobTraits 或 BlobStates 中看不到任何可以改变这一点的可用内容。

在 SDK 版本 12.x 中获取 blob 的 URI 并不直接。当你从中得到一个 BlobItem as part of listing result, you will need to create a BlobClient 对象时,你就可以得到 blob 的 URI。

这是执行此操作的示例代码:

BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(container);
var listingResult = containerClient.GetBlobsAsync();
await foreach (var blobItem in listingResult)
{
    BlobClient blobClient = containerClient.GetBlobClient(blobItem.Name);
    Uri blobUri = blobClient.Uri;
    //Do something with the URI...
}

上面的代码使用了 Azure.Storage.Blobs (12.9.1) SDK。