Получение всех значений из метаданных BlockBlob, начиная с указанной строки ключа c - PullRequest
0 голосов
/ 18 марта 2020

У меня есть BlockBlob изображение с несколькими атрибутами метаданных. Некоторые атрибуты метаданных являются уникальными. Другие начинаются с ключевого идентификатора (в данном случае «Tag»).

Как получить все значения свойств метаданных, начиная со строки c?

Вот пример a BlockBlob image:

BlockBlob Image with Tag Metadata

Существует несколько элементов «Tag», начинающихся с индекса 0.

Вот ручной способ сделать это, но вам нужно знать каждый существующий индекс:

CloudBlobContainer container = await GetCloudBlobClientAsync();
CloudBlobDirectory directory = container.GetDirectoryReference(path);

// Get max of 100 blobs including their metadata properties
var blobs = await directory.ListBlobsSegmentedAsync(false, BlobListingDetails.Metadata, 100, null, null, null);
foreach (var blob in blobs.Results) {
    var imageBlob = new CloudBlockBlob(blob.Uri);
    var blockBlob = imageBlob.GetBlockBlobReference(imageBlob.Name);
    await blockBlob.DownloadTextAsync();

    // This is what I'm trying to do..
    var tagArray = [ blockBlob.Metadata["Tag0"], blockBlob.Metadata["Tag1"], ... ]
    // Returns ["outdoor", "nature", "man" ...]

    // Bonus if it included the key names as well..
    var tagArrayWithKeys = [ "Tag0": blockBlob.Metadata["Tag0"], ... ];
    // Returns [ "Tag0": "outdoor", "Tag1": "nature", "Tag2": "man", ...]
}

Как бы вы сделали это динамически?

1 Ответ

1 голос
/ 19 марта 2020

Как сказал @Gaurav, если вы хотите получить все метаданные одного блоба, вы можете сделать al oop, чтобы получить их. Например,

CloudBlobContainer container = await GetCloudBlobClientAsync();
CloudBlobDirectory directory = container.GetDirectoryReference(path);



// Get max of 100 blobs including their metadata properties
var blobs = await directory.ListBlobsSegmentedAsync(false, BlobListingDetails.Metadata, 100, null, null, null);
foreach (var blob in blobs.Results) {
    var imageBlob = new CloudBlockBlob(blob.Uri);
    var blockBlob = imageBlob.GetBlockBlobReference(imageBlob.Name);
    await blockBlob.DownloadTextAsync();
    foreach(var r in blockBlob.Metadata){
     Console.WriteLine("Key: " + r.Key + " value: " + r.Value);

}

}

Кроме того, если вы хотите получить фильтр метаданных по ключам, обратитесь к следующему коду

CloudBlobContainer container = await GetCloudBlobClientAsync();
CloudBlobDirectory directory = container.GetDirectoryReference(path);



// Get max of 100 blobs including their metadata properties
var blobs = await directory.ListBlobsSegmentedAsync(false, BlobListingDetails.Metadata, 100, null, null, null);
foreach (var blob in blobs.Results) {
    var imageBlob = new CloudBlockBlob(blob.Uri);
    var blockBlob = imageBlob.GetBlockBlobReference(imageBlob.Name);
    await blockBlob.DownloadTextAsync();
    var result = blockBlob.Metadata.where(k => k.Key.StartsWith("Tag"))
    foreach(var r in result){
     Console.WriteLine("Key: " + r.Key + " value: " + r.Value);

}
}
...