2014-03-31 69 views
4

如果有人有使用DownloadRangeToStream函數的經驗,我將不勝感激。Azure下載blob部分

Here他們說參數「length」是數據的長度,但根據我的經驗,它是該段下載的最高位置,例如, 「length」 - 「offset」=數據的實際長度。

我也很感激,如果有人可以給我一些塊下載blob代碼,因爲前面提到的功能似乎並不奏效。

謝謝你的幫助

回答

7

試試這個代碼。它通過將它分成1 MB塊來下載大塊。

static void DownloadRangeExample() 
    { 
     var cloudStorageAccount = CloudStorageAccount.DevelopmentStorageAccount; 
     var containerName = "container"; 
     var blobName = "myfile.zip"; 
     int segmentSize = 1 * 1024 * 1024;//1 MB chunk 
     var blobContainer = cloudStorageAccount.CreateCloudBlobClient().GetContainerReference(containerName); 
     var blob = blobContainer.GetBlockBlobReference(blobName); 
     blob.FetchAttributes(); 
     var blobLengthRemaining = blob.Properties.Length; 
     long startPosition = 0; 
     string saveFileName = @"D:\myfile.zip"; 
     do 
     { 
      long blockSize = Math.Min(segmentSize, blobLengthRemaining); 
      byte[] blobContents = new byte[blockSize]; 
      using (MemoryStream ms = new MemoryStream()) 
      { 
       blob.DownloadRangeToStream(ms, startPosition, blockSize); 
       ms.Position = 0; 
       ms.Read(blobContents, 0, blobContents.Length); 
       using (FileStream fs = new FileStream(saveFileName, FileMode.OpenOrCreate)) 
       { 
        fs.Position = startPosition; 
        fs.Write(blobContents, 0, blobContents.Length); 
       } 
      } 
      startPosition += blockSize; 
      blobLengthRemaining -= blockSize; 
     } 
     while (blobLengthRemaining > 0); 
    }