2014-03-31 10 views
4

누구나 DownloadRangeToStream 기능을 사용 해본 경험이 있으면 매우 감사 할 것입니다.Azure 다운로드 BLOB 부분

Here 그들은 "길이"매개 변수는 데이터의 길이라고 말하지만 내 경험상 다운로드 할 세그먼트의 상단 위치입니다. "길이"- "오프셋"= 데이터의 실제 길이.

이전에 언급 한 기능이 작동하지 않는 것으로 보이기 때문에 아무도 나에게 청크를 다운로드 할 수있는 코드를 줄 수 있다면 정말 고맙겠습니다.

도움 주셔서 감사합니다.

답변

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); 
    } 
관련 문제