Azure Blob Storage 云存储中实现大文件分块断点续传
2011-11-01 11:09
1541 查看
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)
下图显示用PutBlock,PutBlockList上传10MB单个文件结果:
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)
// Put block - upload a block (portion) of a blob. // Return true on success, false if already exists, throw exception on error. public bool PutBlock(string containerName, string blobName, int blockId, string[] blockIds, byte[] content) { try { CloudBlobContainer container = BlobClient.GetContainerReference(containerName); CloudBlockBlob blob = container.GetBlockBlobReference(blobName); string blockIdBase64 = Convert.ToBase64String(System.BitConverter.GetBytes(blockId)); UTF8Encoding utf8Encoding = new UTF8Encoding(); using (MemoryStream memoryStream = new MemoryStream(content)) { blob.PutBlock(blockIdBase64, memoryStream, null); } blockIds[blockId] = blockIdBase64; return true; } catch (StorageClientException ex) { if ((int)ex.StatusCode == 404) { return false; } throw; } } // Put block list - complete creation of blob based on uploaded content. // Return true on success, false if already exists, throw exception on error. public bool PutBlockList(string containerName, string blobName, string[] blockIds) { try { CloudBlobContainer container = BlobClient.GetContainerReference(containerName); CloudBlockBlob blob = container.GetBlockBlobReference(blobName); blob.PutBlockList(blockIds); return true; } catch (StorageClientException ex) { if ((int)ex.StatusCode == 404) { return false; } throw; } }
下图显示用PutBlock,PutBlockList上传10MB单个文件结果:
相关文章推荐
- 【转载】Azure Blob Storage 云存储中实现大文件分块断点续传
- [New Portal]Windows Azure Storage (14) 使用Azure Blob的PutBlock方法,实现文件的分块、离线上传
- 用PHP实现 HTTP断点续传、分块下载文件(Socket)
- 利用TIdHttp实现文件下载的分块断点续传
- 在Oracle中存取BLOB对象实现文件的上传和下载
- 用HttpListener实现文件断点续传
- 用定制的域名访问Azure Storage Blob中的内容
- java和Android文件下载断点续传和图片下载代码实现,可直接复制简单实现
- C#实现文件断点续传下载的方法
- servlet实现从oracle数据库的blob字段中读出文件并显示。
- C#用HTTP协议实现多线程文件下载和断点续传
- 使文件下载的自定义连接支持 FlashGet 的断点续传多线程链接下载! C#/ASP.Net 实现! 转
- J2EE在Oracle中存取BLOB对象实现文件的上传和下载
- 使文件下载的自定义连接支持 FlashGet 的断点续传多线程链接下载! JSP/Servlet 实现!
- 使用VHDUpload上传VHD文件到云存储,并在Azure VM中加挂Azure Drive
- jquery.uploadify-3.1+servlet实现多文件的上传和下载文件存储到BLOB中
- BLOB完全实践:在Oracle中存取BLOB对象实现文件的上传和下载(原创)
- iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄
- DLNA架构在机顶盒上播放云存储文件的实现