Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob、Queue、File 和 Table。

笔者在前文中介绍了 Table Storage 的基本用法,本文将通过 C# 代码介绍 Blob Storage 的主要使用方法。

Blob Storage 是什么?

Azure Blob Storage 是用来存放大量的像文本、图片、视频等非结构化数据的存储服务。我们可以在任何地方通过互联网协议 http 或者 https 访问 Blob Storage。说白了就是把文件放在云上,给它一个 URL,通过这个 URL 来访问文件。这就涉及到一个问题:如何控制访问权限?答案是我们可以根据自己的需要设置 Blob 对象是只能被自己访问,还是可以被所有人访问。

下面是 Blog Storage 典型的应用场景:
1. 存储图片和文档,这些文件可以直接通过浏览器访问。
2. 支持分布式访问,主要用于 cdn。
3. 提供视频、音频流。
4. 存储基本的文件备份和归档文件。

Azure Blob Storage 的结构

下图描述了 Blob Storage 的基本组织结构:

Azure Storage Account:
Storage Account 是用来管理 Azure Storage 的一个命名空间,主要用来控制存储数据的访问权限和计费。对 Blob、Queue、File 和 Table 这些 Azure 提供的存储服务的访问控制都是通过 Storage Account 来进行的,所以要想使用 Blob Storage,需要先创建你的 Storage Account。

Container
Container 中包含一组资源,所有的 Blob 都必须存在于 Container 中。一个 Storage Account 中可以包含无限个 Container,每个 Container 中也可以包含无限个 Blob。需要注意的是 Container 的名字必须全部小写。

Blob
一个 Blob 就代表一个文件。为了区分应用的场景及提升不同应用场景下存储的性能,又为 Blob 划分了不同的类型:block blobs, page blobs, append blobs。Block blobs 主要用来存储静态的文件,比如图片、电影和文档。Append blobs 与 block blobs 类似,但优化了 append 操作,主要的应用场景是存储日志文件。Page blobs 则是针对频繁的读写操作做了优化,像 Azure 上虚拟机的磁盘都是使用的 page blobs。

如果您还不熟悉 Azure Storage Account 的使用,以及如何通过 WindowsAzure.Storage 库访问 Azure Storage,请参考前文《Azure 基础:Table storage》中的介绍,这里就不重复了。

为了方便查看 C# 代码执行的结果,本文使用了 MS 发布的一个 Azure Storage 客户端工具:Microsoft Azure Storage Explorer,文中简称为 Storage Explorer。

接下来我们直接通过 C# 代码来介绍如何操作 Blob Storage。

创建 Blob Container

由于任何一个 Blob 都必须包含在一个 Blob Container 中,所以我们第一步先创建一个名为 "picturecontainer" 的 Blob Container:

// CloudStorageAccount 类表示一个 Azure Storage Account,我们需要先创建它的实例,才能访问属于它的资源。
// 注意连接字符串中的 xxx 和 yyy,分别对应 Access keys 中的 Storage account name 和 key。
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=xxx;AccountKey=yyy");// CloudBlobClient 类是 Windows Azure Blob Service 客户端的逻辑表示,我们需要使用它来配置和执行对 Blob Storage 的操作。
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();// CloudBlobContainer 表示一个 Blob Container 对象。
CloudBlobContainer container = blobClient.GetContainerReference("picturecontainer");
// 如果不存在就创建名为 picturecontainer 的 Blob Container。
container.CreateIfNotExists();

执行上面的代码,然后打开 Storage Explorer,刷新一下,看到名为 "picturecontainer" 的 Blob Container 已经创建:

Container 名称规则

MSDN 上不厌其烦的描述 Blob Container 的名称规则,足以说明其重要性,本文试图以简要的文字进行描述:

1. 以小写字母或数字开头,只能包含字母、数字和 dash(-)。
2. 不能有连续的 dash(-),dash(-) 不能是第一个字符,也不能是最后一个字符。
3. 所有字符小写,总长度为 3-63 字符。

违反任何一个规则,在创建 Blob Container 时都会受到 (400) Bad Request 错误。

上传 Blob 文件

我们上传一个文件到刚才创建的 Container 中:

// mypicture.png 为放在 container 中的 Blob 的名称。
// GetBlockBlobReference 方法获得一个 Block 类型的 Blob 对象的引用。
// 您可以根据应用的需要,分别调用 GetBlobReference,GetAppendBlobReference 或 GetPageBlobReference 来创建不同类型的 Blob 对象。
CloudBlockBlob blockBlob = container.GetBlockBlobReference("mypicture.png");
using (var fileStream = System.IO.File.OpenRead(file))
{
    // 这是一个同步执行的方法
    blockBlob.UploadFromStream(fileStream);
}

在代码中我们通过调用刚才创建的 Container 对象 container 的 GetBlockBlobReference 方法,获得了一个 CloudBlockBlob 类型的对象。然后通过它的 UploadFromStream 方法把一个本地的文件上传到了云端。
刷新 Storage Explorer 看看上传的结果:

图片中显示文件已经上传成功!

遍历 Container 中的内容

如果我们想要罗列出一个 Container 中的所有 Blob 对象,就需要对整个 Container 进行遍历操作:

foreach (IListBlobItem item in container.ListBlobs(null, false))
{
    if (item.GetType() == typeof(CloudBlockBlob)){CloudBlockBlob blob = (CloudBlockBlob)item;
        // todo something
    }
    else if (item.GetType() == typeof(CloudAppendBlob)){CloudAppendBlob appendBlob = (CloudAppendBlob)item;
        // todo something
    }
    else if (item.GetType() == typeof(CloudPageBlob)){CloudPageBlob pageBlob = (CloudPageBlob)item;
        // todo something
    }
    else if (item.GetType() == typeof(CloudBlobDirectory)){CloudBlobDirectory directory = (CloudBlobDirectory)item;
        // todo something
    }
}

这段代码中有两处需要注意的地方:
1. 获得的 Blob 对象是有类型的。
2. 可以获得一个虚拟的目录信息,其实是对文件名称的解析。比如一个 Blob 的名称为 abc/flower.jpg,此时就能获得一个名叫 abc 的虚拟目录信息。

下载 Blob 文件

有上传自然要有下载,看看下载一个 Blob 对象的代码:

// 创建名称为 mypicture.png 的 Blob 对象的引用。
CloudBlockBlob blockBlob = container.GetBlockBlobReference("mypicture.png");
// 把文件保存到本地。
using (var fileStream = System.IO.File.OpenWrite(fileName))
{blockBlob.DownloadToStream(fileStream);
}

Mypicture.png 被下载到本地指定的文件中。

设置 Blob 的访问权限

我们在本文开始的地方就强调可以通过 http 或 https 协议访问 Blob Storage 文件,现在我们就尝试一下。
在 Storage Explorer 中选择 mypicture.png,右键,选择 "Copy URL to Clipboard"。把 URL 粘贴到浏览器的地址栏中。

怎么回事?文件不存在吗?不是的,默认情况下,你的文件是被保护的,只有通过你的 Storage Account 验证后才能访问。如果想要把它设置为任何人都能访问,需要通过设置 Container 的权限来实现。

private static void SetPublicContainerPermissions(CloudBlobContainer container)
{BlobContainerPermissions permissions = container.GetPermissions();
    // Container 中的所有 Blob 都能被访问permissions.PublicAccess = BlobContainerPublicAccessType.Container;container.SetPermissions(permissions);
}

重新在浏览器中访问一次试试:

可要小心哟,要是不小心把私密的文件放到了这个 Container 中可就惨了!

删除 Blob 文件

mypicture.png 已经完成了演示的使命,可以删除它了:

CloudBlockBlob blockBlob = container.GetBlockBlobReference("mypicture.png");
blockBlob.Delete();

总结

Blob Storage 以其丰富的类型(block, append, page)为各类应用场景提供了最优的选择。本文仅仅是入门的介绍,更多的场景如用 Blob 存储设置 cdn ,如何对数据进行加密存储等内容都没有涉及。希望对刚接触 Azure 的朋友有所帮助。

本文转自sparkdev博客园博客,原文链接:http://www.cnblogs.com/sparkdev/p/6441421.html,如需转载请自行联系原作者

Azure 基础:Blob Storage相关推荐

  1. 【Azure】微软 Azure 基础解析(八)Azure 存储服务:探索Blob存储、队列存储、文件存储的特性与适用场景

    本系列博文还在更新中,收录在专栏:「Azure探秘:构建云计算世界」 专栏中. 本系列文章列表如下: [Azure]微软 Azure 基础解析(三)描述云计算运营中的 CapEx 与 OpEx,如何区 ...

  2. Windows Azure Storage (25) Azure Append Blob

    <Windows Azure Platform 系列文章目录> 在笔者之前的文章中,我们介绍了Azure Blob 有两种:Block Blob和Page Blob. 在这里笔者介绍Blo ...

  3. Windows Azure Storage (19) 再谈Azure Block Blob和Page Blob

    <Windows Azure Platform 系列文章目录> 请读者在参考本文之前,预习相关背景知识:Windows Azure Storage (1) Windows Azure St ...

  4. 使用Azure Blob Storage实现一个静态文件服务器

    什么是Azure Blob Storage Azure Blob Storage是微软Azure的对象存储服务.国内的云一般叫OSS,是一种用来存储非结构化数据的服务,比如音频,视频,图片,文本等等. ...

  5. .NET Core 批量重置 Azure Blob Storage 的 mime type

    点击上方蓝字关注"汪宇杰博客" 我的博客使用 Azure Blob Storage 存储文章配图,结果今天玩 Azure CDN 的时候爆了,原因是图片mime type不对.我们 ...

  6. Azure Blob Storage 基本用法 -- Azure Storage 之 Blob

    Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在<Azure Table storage ...

  7. Python 操作 Azure Blob Storage

    安装 Azure Storage SDK for Python 最简单的方式是在安装了 python 和 pip 的机器上直接执行下面的命令: pip install azure-storage 安装 ...

  8. Azure Blob Storage 基本用法上传/下载(Java)

    文章目录 简单概念 Blob Storage Azure Blob Storage的存储结构 Azure Storage Account Container Blob 操作 Maven依赖 创建Con ...

  9. Springboot进行Azure Blob Storage的开发

    java语言的开发 1.引入pom文件 <dependency><groupId>com.microsoft.azure</groupId><artifact ...

  10. 【数据湖】在 Azure Data Lake Storage gen2 上构建数据湖

    介绍 一开始,规划数据湖似乎是一项艰巨的任务--决定如何最好地构建数据湖.选择哪种文件格式.是拥有多个数据湖还是只有一个数据湖.如何保护和管理数据湖.并非所有这些都需要在第一天回答,有些可能通过反复试 ...

最新文章

  1. iOS SwiftUI篇-5 专题NavigationView、NavigationLink
  2. java replaceall函数_JAVA中string.replace和string.replaceAll的区别及用法
  3. python执行shell命令
  4. [ES6] 细化ES6之 -- 数组的扩展
  5. Python语言学习系列------基础语法(一)
  6. 利用百度地图API,在浏览器中找到自己的位置
  7. Flash:LoadVars数据提交与表单处理
  8. Java编程中组合、继承和代理的区别
  9. 拓端tecdat|R语言画ROC曲线总结
  10. 数学系之必备参考书+数学系教材推荐
  11. 2000-2020年中国地面气象数据:从NOAA到分省面板
  12. 计算机黑板报主题ps,Photoshop︱用PS创建一个黑板报
  13. 微信公众号关注自动回复,关键词自动回复,一个PHP文件就可以搞定!
  14. 【成功解决】Ubuntu下U盘文件夹不存在
  15. Intel i226芯片4端口千兆以太网卡 2.5GPoE工业相机图像采集卡介绍
  16. 不容错过, Paintinglite轻量级Sqlite3框架
  17. 100道面试题,能否进蚂蚁看你了!
  18. 程序中的地址转换(虚拟地址-物理地址)
  19. 【20180904】【查漏补缺】量纲分析法—Pi定理(Buckingham定理)
  20. 三菱Qplc.QD75Mh4触摸屏及plc程序,光纤伺服通讯

热门文章

  1. namenode节点无法启动解决方法
  2. php dvws,phpstudy配置dvwa——sql注入、xss攻击练习
  3. python用递归法将一个整数n转化为字符串_Python学习之旅 —— 基础篇(五)字符串格式化、递归、生成器迭代器...
  4. 为啥mysql的load这么快_【MySQL】浅谈MySQL的LOAD DATA
  5. Android中的数据编码,Android与服务端数据传输的编码处理
  6. rk1808交叉编译opencv_我用AI视觉模组DIY了一个驾驶疲劳监测仪
  7. 铜带屏蔽计算机电缆故障,计算机电缆DJYPVP22-300/500V-2*2*1.0价格
  8. python读取csv文件出错:显示utf-8编码问题该怎么解决
  9. windows 搭建和配置 hadoop + 踩过的坑
  10. SQL SERVER中隐式转换的一些细节浅析