Exportar (0) Imprimir
Expandir todo

Actualizar de forma condicional una copia local de un blob

Actualizado: febrero de 2013

Un blob se puede descargar de forma condicional si se incluye una condición en la propiedad AccessCondition. El ejemplo de código siguiente establece la fecha y hora de la última actualización en el método IfModifiedSince. El servicio Blob compara este valor con la hora en que se modificó el blob por última vez. Si el blob no se ha modificado desde el momento especificado, el método DownloadToFile produce una excepción StorageClientException con la propiedad StatusCode establecida en System.Net.HttpStatusCode.NotModified. Tenga en cuenta que las horas del servicio Blob están en la hora universal coordinada (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
        }
    }
}

Vea también

Conceptos

Almacenamiento

Mostrar:
© 2014 Microsoft