Esporta (0) Stampa
Espandi tutto

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

Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2014 Microsoft