部分文件名搜索没有文件扩展名的Azure blob存储

时间:2017-06-12 10:34:43

标签: c# azure azure-blob-storage

我在Blob容器中的azure上有图像文件。所有文件都有唯一的名称。我不得不在名称上搜索这些图像文件,而不需要扩展。例如,我有文件: 英扬留学 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);

2 个答案:

答案 0 :(得分:5)

您可以使用接受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的列表。

答案 1 :(得分:0)

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

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)