VENDITE: 1-800-867-1389

Aggiornare una copia locale di un Blob in modo condizionale

Aggiornamento: febbraio 2013

Un Blob può essere scaricato in modo condizionale inserendo una condizione nella proprietà AccessCondition. Nell'esempio di codice seguente vengono impostate la data e l'ora dell'ultimo aggiornamento del metodo IfModifiedSince. Il servizio Blob confronta questo valore con l'ora dell'ultima modifica del Blob. Se il Blob non è stato modificato dall'ora specificata, il metodo DownloadToFile genera un'eccezione StorageClientException con la proprietà StatusCode impostata su System.Net.HttpStatusCode.NotModified. Si noti che le ore del servizio Blob sono in formato UTC (Coordinated Universal Time).

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

Vedere anche

Concetti

Archiviazione

Il documento è risultato utile?
(1500 caratteri rimanenti)
Grazie per i commenti inviati.
Mostra:
© 2014 Microsoft