(0) exportieren Drucken
Alle erweitern

Bedingtes Aktualisieren einer lokalen BLOB-Kopie

Letzte Aktualisierung: Februar 2013

Das Herunterladen eines BLOB kann an eine Bedingung geknüpft werden, die Sie in der AccessCondition-Eigenschaft angeben können. Im folgenden Codebeispiel werden in der IfModifiedSince-Methode das Datum und die Uhrzeit der letzten Aktualisierung festgelegt. Der Blob-Dienst vergleicht diesen Wert mit der Zeit, zu der das BLOB zuletzt geändert wurde. Wenn das BLOB seit der angegebenen Zeit nicht geändert wurde, löst die DownloadToFile-Methode eine StorageClientException aus und legt die StatusCode-Eigenschaft auf den Wert System.Net.HttpStatusCode.NotModified fest. Beachten Sie, dass alle Blob-Dienstzeiten in koordinierter Weltzeit (UTC) angegeben werden.

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
        }
    }
}

Siehe auch

Konzepte

Speicher

Anzeigen:
© 2014 Microsoft