Хранилище Azure CloudBlob. Свойства не инициализируются при использовании GetBlobReference () - PullRequest
14 голосов
/ 03 апреля 2012

Я пытаюсь получить некоторую информацию о BLOB-объекте Azure (время последнего изменения UTC).Эта информация хранится в свойстве CloudBlob.Properties.LastModifiedUtc.

Если я использую метод GetBlobReference () или GetBlockBlobReference (), свойства BLOB-объекта не инициализируются (LastModifiedUtc - DateTime.MinDate).Если я использую ListBlobs (), свойства инициализируются правильно (LastModifiedUtc имеет правильное значение).

Я что-то не так делаю при использовании функции GetBlobReference?Есть ли способ получить экземпляр CloudBlob только для одного конкретного BLOB-объекта?Я знаю, что могу пропустить ListBlobs () и отфильтровать только интересующий меня BLOB-объект или использовать ListBlobsWithPrefix () из класса CloudBlobClient, но я ожидаю получить все метаданные при запросе конкретной ссылки Blob.

Код, показывающий, как я работаю с BLOB-объектами Azure:

    string storageAccountName = "test";
    string storageAccountKey = @"testkey";
    string blobUrl = "https://test.blob.core.windows.net";
    string containerName = "testcontainer";
    string blobName = "testbontainer";

    var credentials = new StorageCredentialsAccountAndKey(storageAccountName, storageAccountKey);
    var cloudBlobClient = new CloudBlobClient(blobUrl, credentials);
    var containerReference = cloudBlobClient.GetContainerReference(string.Format("{0}/{1}", blobUrl, containerName));

    // OK - Result is of type CloudBlockBlob, cloudBlob_ListBlobs.Properties.LastModifiedUtc > DateTime.MinValue
    var cloudBlob_ListBlobs = containerReference.ListBlobs().Where(i => i is CloudBlob && ((CloudBlob)i).Name == blobName).FirstOrDefault() as CloudBlob;

    // WRONG - Result is of type CloudBlob, cloudBlob_GetBlobReference.Properties.LastModifiedUtc == DateTime.MinValue
    var cloudBlob_GetBlobReference = containerReference.GetBlobReference(string.Format("{0}/{1}/{2}", blobUrl, containerName, blobName));

    // WRONG - Result is of type CloudBlockBlob, cloudBlob_GetBlockBlobReference.Properties.LastModifiedUtc == DateTime.MinValue
    var cloudBlob_GetBlockBlobReference = containerReference.GetBlockBlobReference(string.Format("{0}/{1}/{2}", blobUrl, containerName, blobName));

Ответы [ 2 ]

36 голосов
/ 03 апреля 2012

Полагаю, вам нужно сделать отдельный вызов для получения атрибутов / метаданных.После получения ссылки на BLOB-файл введите следующую строку для получения атрибутов:

cloudBlob_GetBlobReference.FetchAttributes ();

2 голосов
/ 17 марта 2015

Это относится к Java SDK.Но имея объект CloudBlob производный CloudBlockBlob, вам может потребоваться вызов CloudBlob.downloadAttributes () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...