Частичное имя файла Поиск в хранилище BLOB-объектов Azure без расширения файла

У меня есть файлы изображений на Azure в контейнере Blob. Все файлы имеют уникальные имена. Мне нужно искать эти файлы изображений по имени без расширений. Например у меня есть файлы: 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);

person Praful Mattoo    schedule 12.06.2017    source источник


Ответы (2)


Что вы можете сделать, так это использовать файл _1

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.

person Peter Bons    schedule 12.06.2017
comment
Я получаю сообщение об ошибке blockBlob.FetchAttributes(); поскольку blockbob создается как IListBlobItem, у которого нет метода fetchattributes(). - person Praful Mattoo; 12.06.2017
comment
@PrafulMattoo См. правку (добавлено OfType<CloudBlockBlob>();) - person Peter Bons; 12.06.2017
comment
@PrafulMattoo Рад помочь и добро пожаловать в Stack Overflow. Если этот или любой другой ответ решил вашу проблему, отметьте его как принятый. - person Peter Bons; 12.06.2017

Для новичков вы должны использовать следующее:

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 (список больших двоичных объектов с Azure клиентские библиотеки хранилища)

person ygugen    schedule 13.04.2021