不带文件扩展名的 Azure blob 存储的部分文件名搜索

Partial file name Search of Azure blob storage without file extension

我在 Blob 容器中的 Azure 上有图像文件。所有文件都有唯一的名称。我需要在没有扩展名的情况下按名称搜索这些图像文件。例如我有文件: 123.PNG 345.jpg 122.JPG

如果我给出文件的完整名称,如123.PNG,目前的代码可以搜索。 如何使它仅通过 123 就可以工作。

代码:ID 作为参数传递,它是 blob 中的文件名。:

            var blobClient = storageAccount.CreateCloudBlobClient();
            var container = blobClient.GetContainerReference("images");
            container.CreateIfNotExists();
            var blockBlob = container.GetBlockBlobReference(id);
            blockBlob.FetchAttributes();
            byte[] downloadedImage = new byte[blockBlob.Properties.Length];
            blockBlob.DownloadToByteArray(downloadedImage, 0);
            var imageBase64 = Convert.ToBase64String(downloadedImage);

您可以使用接受 string prefix 参数的 ListBlobs 方法,如下所示:

var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference("images");
container.CreateIfNotExists();
var blockBlobs = container.ListBlobs(prefix: "123.").OfType<CloudBlockBlob>();

var blockBlob = blockBlobs.First();
blockBlob.FetchAttributes();
byte[] downloadedImage = new byte[blockBlob.Properties.Length];
blockBlob.DownloadToByteArray(downloadedImage, 0);
var imageBase64 = Convert.ToBase64String(downloadedImage);

以上示例将找到 123.JPG 或 123.PNG(或两者)

您将获得名称以 prefix 开头的所有 blob 的列表。

对于新手,你应该这样使用:

var pagesize = 10;    
var resultSegment = blobContainerClient.GetBlobsAsync(prefix: "BlobName")
            .AsPages(default, pagesize);

        // Enumerate the blobs returned for each page.
        await foreach (Azure.Page<BlobItem> blobPage in resultSegment)
        {
            foreach (BlobItem blobItem in blobPage.Values)
            {
                Console.WriteLine("Blob name: {0}", blobItem.Name);
            }

            Console.WriteLine();
        }

参考:MSDN(List blobs with Azure Storage client libraries)