[New Portal]Windows Azure Storage (14) 使用Azure Blob的PutBlock方法,实现文件的分块、离线上传

简介:

 Windows Azure Platform 系列文章目录

  相关内容

  Windows Azure Platform (二十二) Windows Azure Storage Service存储服务之Blob详解(上)

  Windows Azure Platform (二十三) Windows Azure Storage Service存储服务之Blob详解(中)

  Windows Azure Platform (二十四) Windows Azure Storage Service存储服务之Blob详解(下)

 

  我们知道,BLOB(大型二进制对象)数据是用来存储文件、图片、文档等二进制格式的文件。

  BLOB分为2种:

  -Block BLOB(区块型BLOB存储),这类的存储以4M为一个区块单位,单一文件最大可以存储200GB,且区块不会连续存储,可能会在不同的存储服务器分块存放。为了适应文件的上传和下载而专门进行了优化。当应用程序要求时,会一招文件的KEY以及区块存储区提供数据。

  -Page BLOB,是优化的随机访问。它会在存储区中划分一个连续的区域供应用程序存放数据,它本身可以视为一个大型的VHD(虚拟机软盘)。如果我们拿我们的应用程序迁移到Windows Azure平台上,对于文件的读写操作可能需要进行一些修改,但是通过Page Blob就可以方便我们迁移:微软特别在Page BLOB上提供了一组将Page BLOB虚拟成软盘的功能,称为Windows Azure Drive(研发代号为XDrive),它能够支持NTFS API,也就是说应用程序可以利用现有的文件管理API(包含System.IO的类型)来访问Windows Azure Drive中的文件夹与文件数据,并且这些数据会保存在Windows Azure数据中心内。

  BLOB服务由BLOB本身以及其收纳容器(Container)构成,容器可视为一般本机上的文件夹。而Blob就是保存某个文件。

 

  Block Blobs可以通过2种方法创建。不超过64MB的Block Blobs可以通过调用PutBlob操作进行上传。大于64MB的Block Blobs必须分块上传,且每块的大小不能超过4MB。当所有的Block上传成功后,必须调用PutBlockList操作进行合并,成为连续的Blob。Block Blob目前最大支持200GB.

  PubBlock:上传单个Block数据:

public void PutBlock(string blockId, Stream blockData, string contentMD5, AccessCondition accessCondition = null, BlobRequestOptions options = null, OperationContext operationContext = null);

  -blockId,使用Base64编码格式,代表了唯一的Block

  -blockData,block包含的数据流

  -contentMD5,用来验证block完整性的哈希值,可以为Null或者是空

 

  PubBlockList:根据blockId集合提交所有的block,并创建blob文件。只有提交以后,通过PutBlock上传的block数据才能成为Blob文件的一部分。

public void PutBlockList(IEnumerable<string> blockList, AccessCondition accessCondition = null, BlobRequestOptions options = null, OperationContext operationContext = null);

  -blockList:blockId集合

  -options:给请求定义的额外的配置。

 

  分块上传数据的步骤如下:

  1.首先确定block的大小,Azure Blob规定最大不能超过4MB

  2.通过FileStream的Read方法依次按量读取块数据,并依次调用PutBlock将块数据上传,每次上传时需要一个对应的blockId,上传成功以后将对应的blockId存储;

  3.所有Block上传完成以后,调用PutBlockList提交将才上传的所有block,组成blob文件。(注意,对于未提交的Block数据,一个星期之内将被自动回收。)

 

  断点续传设计:

  1.假如上传的数据是100MB,每个block大小为1M。

  2.当上传第50个block的时候关闭应用程序窗体。在关闭窗口的时候,

    a)保存上传block的索引位置(例如第50个),至本地的文本文件。

    b)保存上传成功的所有的block ID,至本地的文本文件。

  3.重新打开应用程序窗体。在窗体启动的时候,读取本地保存的文本文件信息,获得上次退出时的block索引位置所有的block ID

  4.续传。从上次的block索引位置开始,继续传输剩下的block(从第51个开始)

  5.传输完毕,调用PutBlockList方法,提交所有的Block Id,完成传输。并且删除本地的文本文件。

 

  代码在这里下载

 

  使用方法:

  1.以管理员身份,运行VS2012,并且打开项目

  2.修改Form1.cs中的storageConnectionString参数,将[Acount Name]和[Account Key]修改成你自己Azure Storage相关的信息。

  修改GetBlockBlob函数中的[containerName]参数,设置成你自己Azure Storage Container中的信息

  3.运行项目,点击浏览按钮,选择本地的文件。

  4.点击开始,上传数据

  5.在上传过程中,点击窗体的关闭按钮,退出程序。

  6.重新启动VS项目,重新选择之前同样的文件,程序会进行续传。(有兴趣的网友,可以在我的基础上继续修改。在关闭程序的时候,保存上传文件在本地的路径,下次续传的时候就不需要重新选择同样的文件路径了)

  

  相关截图:

  

 

参考资料:http://www.cnblogs.com/lijiawei/archive/2013/01/18/2866756.html

  

 

分类:  Azure Storage

本文转自Lei Zhang的博客博客园博客,原文链接:http://www.cnblogs.com/threestone/p/3211183.html,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
326 4
|
1月前
|
安全 Windows
【Azure Cloud Service】在Windows系统中抓取网络包 ( 不需要另外安全抓包工具)
通常,在生产环境中,为了保证系统环境的安全和纯粹,是不建议安装其它软件或排查工具(如果可以安装,也是需要走审批流程)。 本文将介绍一种,不用安装Wireshark / tcpdump 等工具,使用Windows系统自带的 netsh trace 命令来获取网络包的步骤
71 32
|
1月前
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
44 11
|
23天前
|
存储 缓存 安全
硬盘数据恢复:恢复硬盘数据的9个实用方法(Windows版)
无论是工作文档、家庭照片,还是其他珍贵的数字资产,数据丢失总是一件让人头疼的事情。然而,当硬盘发生问题时,不必过于慌张——只要正确应对,许多数据都可以被成功恢复。本文将从常见数据丢失原因到具体恢复方法,为您提供全面的硬盘数据恢复指导。
|
2月前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
|
2月前
|
存储 开发框架 .NET
Windows IIS中asp的global.asa全局配置文件使用说明
Windows IIS中asp的global.asa全局配置文件使用说明
54 1
|
2月前
|
Java Windows
如何在windows上运行jar包/JAR文件 如何在cmd上运行 jar包 保姆级教程 超详细
本文提供了一个详细的教程,解释了如何在Windows操作系统的命令提示符(cmd)中运行JAR文件。
1213 1
|
2月前
|
弹性计算 数据安全/隐私保护 Windows
阿里云国际版无法远程连接Windows服务器的排查方法
阿里云国际版无法远程连接Windows服务器的排查方法
|
2月前
|
安全 Windows
Windows系统实现exe服务注册的方法都有哪些?
【10月更文挑战第5天】Windows系统实现exe服务注册的方法都有哪些?
470 0
|
2月前
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
56 0