Подтвердить что ты не робот

Azure Storage CloudBlob.Properties не инициализируется при использовании GetBlobReference()

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

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

Я делаю что-то неправильно при использовании функции GetBlobReference? Есть ли способ получить экземпляр CloudBlob только для одного конкретного блоба? Я знаю, что могу пропускать ListBlobs() и фильтровать только интересующий blob или использовать ListBlobsWithPrefix() из класса CloudBlobClient, но я ожидал бы получить все метаданные, когда я попрошу конкретную ссылку на 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));
4b9b3361

Ответ 1

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

cloudBlob_GetBlobReference.FetchAttributes();