エクスポート (0) 印刷
すべて展開

BLOB のローカル コピーを条件付きで更新する

更新日: 2013年2月

BLOB は、AccessCondition プロパティに条件を含めることによって、条件付きでダウンロードできます。次のコード例では、IfModifiedSince メソッドで最後の更新の日付と時刻を設定します。BLOB サービスでは、この値と BLOB が最後に変更された時刻が比較されます。指定された時刻以降に BLOB が変更されていない場合、DownloadToFile メソッドは、StatusCode プロパティを System.Net.HttpStatusCode.NotModified に設定して StorageClientException をスローします。BLOB サービスの時刻は、協定世界時 (UTC) にあることに注意してください。

class RefreshLocalCopy
{
    const string MY_FILE = @"c:\temp\myfile.txt";
    static DateTime revTimeOfLastDownloaded = new DateTime(1900, 1, 1); // old

    static void Main(string[] args)
    {
        CloudBlobClient blobClient = new CloudBlobClient(
            "https://myaccount.blob.core.windows.net/",
            new StorageCredentialsAccountAndKey("myaccount", "mykey=="));

        string s = "testcontainer/" + System.IO.Path.GetFileName(MY_FILE);
        CloudBlob blob = blobClient.GetBlobReference(s);

        ReadBlobIfUpdated( blob );  // downloads the blob
        blob.UploadFile( MY_FILE ); // updates the blob
        ReadBlobIfUpdated( blob );  // downloads the updated blob
        ReadBlobIfUpdated(blob);    // notices no changes
    }

    static void ReadBlobIfUpdated(CloudBlob blob)
    {
        try
        {
            blob.FetchAttributes();

            blob.DownloadToFile(MY_FILE,
                new BlobRequestOptions() 
                    { AccessCondition =
                        AccessCondition.IfModifiedSince(revTimeOfLastDownloaded) }
            );

            // code reached when download succeeds (w/ no exception)
            revTimeOfLastDownloaded = blob.Attributes.Properties.LastModifiedUtc; 
        }
        catch (StorageClientException e)
        {
            if (e.StatusCode == System.Net.HttpStatusCode.NotModified)
            {
                Console.WriteLine("Blob not modified since our last read.");
                return;
            }

            throw e; // some other storage exception? rethrow
        }
    }
}

参照

表示:
© 2014 Microsoft