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

  

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

  1. Windows Azure Storage (20) 使用Azure File实现共享文件夹

    <Windows Azure Platform 系列文章目录> Update 2016-4-14.在Azure VM配置FTP和IIS,请参考: http://blogs.iis.net/ ...

  2. Azure Storage用法:使用Blob Storage

    Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在C# 消息队列-Microsoft Azure ...

  3. Windows Azure Storage (24) 启用Azure Blob日志

    <Windows Azure Platform 系列文章目录> 之前有一个业务需求,客户想知道Azure Storage是否有日志功能,可以检查某个Azure Blob文件在某个时间点被删 ...

  4. Windows Azure Storage (23) 计算Azure VHD实际使用容量

    <Windows Azure Platform 系列文章目录> 对于A系列和D系列的虚拟机来说,使用的是普通存储. 普通存储的存储资源,是按照每GB每月计费的.Microsoft Azur ...

  5. 【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法

    问题描述 在PHP项目部署在App Service后,上传文件如果大于1MB就会遇见 413 Request Entity Too Large 的问题. 问题解决 目前这个问题,首先需要分析应用所在的 ...

  6. Windows下如何将一个文件夹通过Git上传到GitHub上(转)

    在通过windows系统的电脑上写代码,需要将项目上传到GitHub上去.比如在Pycharm上写Django后端,整个项目是一个文件夹的形式,那么怎么才能这个文件夹通过Git命令上传到GitHub上 ...

  7. Windows下解决github push failed (remote: Permission to userA/XXXX.git denied to userB.) 上传gitHub失败报错

    Windows环境下解决 github push failed (remote: Permission to userA/XXXX.git denied to userB.) · 初学GitHub的朋 ...

  8. Windows下一个比较完美的线程池实现(使用线程池实现的Http上传下载实现)

    http://blog.csdn.net/fishjam/article/details/8632049 http://download.csdn.net/user/fishjam

  9. Mac下 Windows 7 虚拟机成功搭建SVN服务器后如何与Xcode建立联系,并上传原始工程的详细步骤

    内容中包含 base64string 图片造成字符过多,拒绝显示

随机推荐

  1. SMARTY模板中如何使用get,post,request,cookies,session,server变量

    {$smarty}保留变量不需要从PHP脚本中分配,是可以在模板中直接访问的数组类型变量,通常被用于访问一些特殊的模板变量.例如,直接在模板中访问页面请求变量.获取访问模板时的时间戳.直接访问PHP中 ...

  2. MR操作

    MR操作————Map.Partitioner.Shuffle.Combiners.Reduce 1.Map步骤 1.1 读取输入文件,解析成k-v对,其中每个k-v对调用一次map函数 1.2 写自 ...

  3. Redis学习总结(1)——数据持久化

    以前研究Redis的时候,很多东西都不太明白,理解得也不太深,现在有时间重新拾起来看看,将一些心得记录下来,希望和大家一起探讨. 一.简介 Redis是一个单线程高可用的Key-Value存储系统,和 ...

  4. QT5之三大重要窗体

    当创建项目时,会发现编辑器提供三个基类,分别为:QMainWindow.QWidget.QDialog,三个基类的区别说明如下.1.QMainWindowQMainWindow类提供一个有菜单条.锚接 ...

  5. 【转载】AB测试结果分析

    AB测试,200个请求,20个并发.这样的测试强度,CPU占了70-80%,w3p占用了70多M内存,本想多测几次,看看它的内存会不会涨上去,没 有测试机器没办法,开发机要干活.我估计CPU就有问题了 ...

  6. 分布式大数据高并发的web开发框架

    一.引言 通常我们认为静态网页html的网站速度是最快的,但是自从有了动态网页之后,很多交互数据都从数据库查询而来,数据也是经常变化的,除了一些新闻资讯类的网站,使用html静态化来提高访问速度是不太 ...

  7. 2016-1-29 图解HTTP(04)

    第7章 确保Web安全的HTTPS 在HTTP协议中有可能存在信息窃听或身份伪装等安全问题.使用HTTPS通信机制可以有效的防止这些问题. 7.1 HTTP的缺点 ● 通信使用明文(不加密),内容可能 ...

  8. elasticsearch-1.3.0 之索引代码粗略梳理

    elasticsearch-1.3.0 发送请求 创建 [root@centos ~]# curl -XPUT 172.16.136.159:9200/customer?pretty { " ...

  9. [8.3] Magic Index

    A magic index in an array A[0...n-1] is defined to be an index such that A[i] = i. Given a sorted ar ...

  10. Lession1 写在机器学习之前

    机器学习从学习方式上来讲,可以分为两类: 监督学习(Supervised Learning),简而言之就是“有标签”学习 无监督学习(Unsupervised Learning),简而言之就是“无标签 ...