【轉載】Azure Blob Storage 雲端儲存中實現大檔案分塊斷點續傳

來源:互聯網
上載者:User

Blob 服務提供二進位檔案和文字檔的儲存。通過Blob的 REST API 能夠訪問2種資源: Containers 和 Blobs。容器可以看做包含多個檔案的檔案夾,而blob便是屬於某個容器的檔案。有如下2種blob:

  • Block Blobs: 該類型用於流式訪問。
  • Page Blobs: 該類型用於隨機讀寫操作,能夠向blob中寫入一部分位元組。

Block Blobs 可以通過2種方法建立。 不超過64MB 的Block blobs 可以通過調用Put Blob 操作進行上傳。大於64 MB的 Block blobs 必須分塊上傳,每塊不超過4MB。當所有的分塊成功上傳之後,通過調用Put Block List操作進行合并,成為單個連續的blob。Block blob目前最大支援200GB。

Page blobs 可以由調用Put Blob操作來建立和初始化,支援最大尺寸。通過調用Put Page  操作,向page blob寫入內容。Page blob 目前最大支援 1 TB。

Blobs 支援條件更新,更多請參見:

  • "Understanding Block Blobs and Page Blobs" on MSDN.
  • "Blob Service Concepts" on MSDN.
  • "Blob Service API" on MSDN.
  • "Windows Azure Storage Client Library" on MSDN.

以下代碼實現PutBlock檔案塊,最後需調用 PutBlockList實現最後寫入檔案。

主要代碼如下:(PutBlock返回的blockIds數組,最後要將此數組傳入PutBlockList)

 

[csharp] view plaincopy
  1. // Put block - upload a block (portion) of a blob.   
  2. // Return true on success, false if already exists, throw exception on error.  
  3. public bool PutBlock(string containerName, string blobName, int blockId, string[] blockIds, byte[] content)  
  4. {  
  5.     try  
  6.     {  
  7.         CloudBlobContainer container = BlobClient.GetContainerReference(containerName);  
  8.         CloudBlockBlob blob = container.GetBlockBlobReference(blobName);  
  9.   
  10.         string blockIdBase64 = Convert.ToBase64String(System.BitConverter.GetBytes(blockId));  
  11.   
  12.         UTF8Encoding utf8Encoding = new UTF8Encoding();  
  13.         using (MemoryStream memoryStream = new MemoryStream(content))  
  14.         {  
  15.             blob.PutBlock(blockIdBase64, memoryStream, null);  
  16.         }  
  17.   
  18.         blockIds[blockId] = blockIdBase64;  
  19.   
  20.         return true;  
  21.     }  
  22.     catch (StorageClientException ex)  
  23.     {  
  24.         if ((int)ex.StatusCode == 404)  
  25.         {  
  26.             return false;  
  27.         }  
  28.   
  29.         throw;  
  30.     }  
  31. }  
  32.   
  33.   
  34. // Put block list - complete creation of blob based on uploaded content.  
  35. // Return true on success, false if already exists, throw exception on error.  
  36.   
  37. public bool PutBlockList(string containerName, string blobName, string[] blockIds)  
  38. {  
  39.     try  
  40.     {  
  41.         CloudBlobContainer container = BlobClient.GetContainerReference(containerName);  
  42.         CloudBlockBlob blob = container.GetBlockBlobReference(blobName);  
  43.        
  44.         blob.PutBlockList(blockIds);  
  45.   
  46.         return true;  
  47.     }  
  48.     catch (StorageClientException ex)  
  49.     {  
  50.         if ((int)ex.StatusCode == 404)  
  51.         {  
  52.             return false;  
  53.         }  
  54.   
  55.         throw;  
  56.     }  
  57. }  

 

顯示用PutBlock,PutBlockList上傳10MB單個檔案結果:

 

原文:

http://blog.csdn.net/lihonggen0/article/details/6924107 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.