Azure blob(最終更新日時)の情報を取得しようとしています。この情報は、CloudBlob.Properties.LastModifiedUtcプロパティに格納されます。Azure Storage CloudBlob.Propertiesは、GetBlobReference()を使用して初期化されていません。
メソッドGetBlobReference()またはGetBlockBlobReference()を使用すると、BLOBのプロパティは初期化されません(LastModifiedUtcはDateTime.MinDate)。 ListBlobs()を使用すると、プロパティが正しく初期化されます(LastModifiedUtcは正しい値を持ちます)。
GetBlobReference関数を使用するときに何か問題がありますか?ある特定のBLOBのCloudBlobインスタンスを取得する方法はありますか?私はListBlobs()を逃して、私が興味を持っているBLOBだけをフィルターに掛けたり、CloudBlobClientクラスのListBlobsWithPrefix()を使うことができますが、特定の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));
詳細については、GetBlobReference()はネットワークコールを行いません。これは、ちょうどあなたに正しいURLで初期化されたオブジェクトを返します。属性を取得するには、ネットワーク呼び出しを行う必要があります。また、.FetchAttributes()は最小限に行う(HEAD要求を行う)方法です。 – smarx
ああ、ありがとう、私はGetBlobReference()がちょうどクライアント側のファクトリメソッドであることに気づいていなかった、私はそれがAzureに対して呼び出しを行うことを期待していた。今それは私には意味がある。 – Tiny
貴重な答えが私をたくさん救った –