149 votes

Vérification de l'existence d'un blob dans Azure Storage

J'ai une question très simple (j'espère!) - je veux juste savoir si un blob (avec un nom que j'ai défini) existe dans un conteneur particulier. Je le téléchargerai s'il existe, et si ce n'est pas le cas, je ferai autre chose.

J'ai effectué des recherches sur intertubes et, apparemment, il existait une fonction appelée DoesExist ou quelque chose de similaire. nom très habilement déguisé).

224voto

Richard Points 2147

La nouvelle API a l'appel de fonction .Exists (). Assurez-vous simplement que vous utilisez le GetBlockBlobReference , qui n'effectue pas l'appel sur le serveur. Cela rend la fonction aussi simple que:

 public static bool BlobExistsOnCloud(CloudBlobClient client, 
    string containerName, string key)
{
     return client.GetContainerReference(containerName)
                  .GetBlockBlobReference(key)
                  .Exists();  
}
 

51voto

smarx Points 18006

Note: Cette réponse est obsolète maintenant. Veuillez voir Richard réponse ci-dessous pour un moyen facile de vérifier l'existence

Non, tu ne manque pas quelque chose de simple... nous avons fait un bon travail de masquage de cette méthode dans la nouvelle bibliothèque StorageClient. :)

Je viens d'écrire un post de blog pour répondre à votre question: http://blog.smarx.com/posts/testing-existence-of-a-windows-azure-blob.

La réponse courte est: utiliser CloudBlob.FetchAttributes(), qui fait une TÊTE de demande par rapport à la goutte.

16voto

nathanw Points 111

Vous semblez boiteux qu'il vous faille attraper une exception pour vérifier si le blob existe.

 public static bool Exists(this CloudBlob blob)
{
    try
    {
        blob.FetchAttributes();
        return true;
    }
    catch (StorageClientException e)
    {
        if (e.ErrorCode == StorageErrorCode.ResourceNotFound)
        {
            return false;
        }
        else
        {
            throw;
        }
    }
}
 

9voto

judell Points 126

Si la goutte est public, vous pouvez, bien sûr, il suffit d'envoyer un HTTP TÊTE, à partir de la zillions de langages/environnements/plates-formes qui savent comment le faire-et vérifier la réponse.

Le noyau d'Azur sont des Api RESTful basé sur XML, interfaces HTTP. La bibliothèque StorageClient est l'un des nombreux possible wrappers autour d'eux. Voici un autre que Sriram Krishnan n'en Python:

http://www.sriramkrishnan.com/blog/2008/11/python-wrapper-for-windows-azure.html

Il montre également comment authentifier au niveau HTTP.

J'ai fait une chose similaire pour moi en C#, parce que je préfère voir Azure à l'aide de la lentille de HTTP/REST plutôt qu'à travers le prisme de la bibliothèque StorageClient. Pendant très longtemps, je n'avais même pas pris la peine de mettre en œuvre un ExistsBlob méthode. Tous mes gouttes ont été public, et c'était trivial à faire HTTP TÊTE.

5voto

huha Points 741

La nouvelle bibliothèque de stockage Windows Azure contient déjà la méthode Exist (). C'est dans le Microsoft.WindowsAzure.Storage.dll.

Disponible en tant que paquet NuGet
Créé par: Microsoft
Id: WindowsAzure.Storage
Version: 2.0.5.1

Voir aussi msdn

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X