2014-07-21 1 views
1

Donne le code et la sortie suivants, j'obtiens la même exception pour ce fichier chaque fois que j'essaie de le télécharger. Si je le télécharge sans validation de md5 et vérifie le contenu, il n'y a rien de mal avec le fichier, donc je soupçonne que la valeur de la propriété md5 est incorrecte sur les métadonnées blobs. J'essaie de comprendre comment il pourrait devenir invalide en premier lieu. N'est-ce pas le stockage azur blob interne qui définit cette propriété lorsque les fichiers sont téléchargés?AzureBlobStorage: MD5 calculé ne correspond pas à la propriété existante

Je ne veux pas DisableContentMD5Validation en tant que solution.

(ps. I utilisé Couldberry Explorer pour télécharger le fichier en premier lieu)

 static void Main(string[] args) 
    { 
     { 
      try 
      { 

       var client = account.CreateCloudBlobClient(); 
       var container = client.GetContainerReference("algorithms"); 
       var blob = container.GetBlockBlobReference("SInnovations.Algorithms/SInnovations.Algorithms.FootprintFinder.1.0.0-pre-20140430.zip"); 
       blob.FetchAttributes(); 
       Console.WriteLine(blob.Properties.ContentMD5); 

       blob.DownloadToFile("c:\\dev\\test.zip", System.IO.FileMode.Create); 

      } 
      catch (StorageException ex) 
      { 
       if (ex.Message == "Calculated MD5 does not match existing property") 
       { 
        Console.WriteLine("Calculated MD5 does not match existing property"); 
       } 

      } 
     } 
     { 


      var client = account.CreateCloudBlobClient(); 
      var container = client.GetContainerReference("algorithms"); 
      var blob = container.GetBlockBlobReference("SInnovations.Algorithms/SInnovations.Algorithms.FootprintFinder.1.0.0-pre-20140430.zip"); 
      blob.FetchAttributes(); 
      Console.WriteLine(blob.Properties.ContentMD5); 

      blob.DownloadToFile("c:\\dev\\test.zip", System.IO.FileMode.Create,null,new BlobRequestOptions() 
      { 
       DisableContentMD5Validation = true, 
      }); 
      using (var md5 = MD5.Create()) 
      { 
       using (var stream = File.OpenRead("c:\\dev\\test.zip")) 
       { 
        Console.WriteLine(md5.ComputeHash(stream)); 
       } 
      } 

     } 
    } 
} 

donne cette sortie

RH4EqqbthSm24KPgZ2VSGQ== 
Calculated MD5 does not match existing property 
RH4EqqbthSm24KPgZ2VSGQ== 
System.Byte[] 
Press any key to continue . . . 

Mauvais exemple, les fichiers locaux md5 est enfait, Hv + nQRNCPQnvy4WU9 + qaQA ==.

Conclusion La propriété doit être réglée à un moment donné.

Solution. Téléchargez et calculez md5 et mettez à jour la valeur de propriété du blob.

+0

Se pourrait-il que Cloudberry Explorer ne configure pas correctement le MD5? –

+0

peut-être. mise à jour de la question avec quelques informations intéressantes. 2sec –

+0

Pouvez-vous expliquer pourquoi lors du téléchargement du fichier et calcule le MD5, il correspond à celui stocké dans les en-têtes, mais il échoue encore quand ne pas avoir désactivé la validation –

Répondre

0

J'ai rencontré le même problème, avec des fichiers qui ont été téléchargés via CloudBerry Storage Explorer (2.4.0.163). J'ai téléchargé les mêmes fichiers via Azure Portal et Azure Storage Explorer (http://storageexplorer.com/) et je n'ai pas rencontré le même problème (corruption de contenu ou md5 discordance).

+1

Comme on m'a dit que Cloudberry ne calcule md5 sur aucune scène, il suffit de télécharger les données et cet en-tête est généré par Azure. – Antoine

Questions connexes