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

笔者在《Azure Blob Storage 基本用法》中介绍了 Blob Storage 的基本用法,本文将介绍 File Storage 的主要使用方法。
File Storage 是什么?
Azure File Storage 是一个通过 Server Message Block (SMB) 协议提供云端文件共享的服务。通过 File Storage 共享的文件,能够被加载为云端或本地主机的磁盘,应用程序可以通过文件 API 像访问本地文件一样访问这些文件。
下面是 File Storage 典型的应用场景:
- 轻松迁移那些有磁盘读写操作的应用到云端。不用修改程序,只要通过 File Storage 加载相应的文件即可。
- 存放共享的应用程序配置文件。
- 存放日志等应用程序诊断数据。
- 存放管理员的常用工具。
Azure File Storage的结构
下图描述了 File Storage 的基本组织结构:

- Azure Storage Account:
Storage Account 是用来管理 Azure Storage 的一个命名空间,主要用来控制存储数据的访问权限和计费。对 Blob、Queue、File 和 Table 这些 Azure 提供的存储服务的访问控制,都是通过 Storage Account 来进行的,所以要想使用 File Storage,需要先创建你的 Storage Account。
- Share:
Share 是管理共享文件的单位,任何要共享的文件和目录都必须属于某个 Share。一个 Storage Account 下的 Share 数量是不受限制的,每个 Share 中可以存放任何数量的文件。但是每个 Share 中最多能存放5TB 的数据。
- Directory:
与 Blob Storage 不同,File Storage 支持真正的文件目录。你可以根据需要来创建目录。
- File:
File 是真正被共享的文件,每个文件最大 1TB。
- URL format:
与 Blob Storage 相似,File Storage 中的每个文件都可以通过 URL 来访问。URL 的详细格式为:
https://<storage account>.file.core.windows.net/<share>/<directory/directories>/<filename>
下面是个更真实的例子:
https://nickdemo.file.core.windows.net/demofiles/temp.txt
如果您还不熟悉 Azure Storage Account 的使用,以及如何通过 WindowsAzure.Storage 库访问 Azure Storage,请参考前文《Azure Table storage 基本用法》中的介绍,这里就不重复了。
为了方便查看 C# 代码执行的结果,本文使用了 MS 发布的一个 Azure Storage 客户端工具:Microsoft Azure Storage Explorer,文中简称为 Storage Explorer。下面是 File Storage 的一个截图:

接下来我们通过 C# 代码来介绍如何操作 File Storage。
创建 File Share
第一步我们先创建名为“mylogs”的 Share:
//CloudStorageAccount 类表示一个 Azure Storage Account,我们需要先创建它的实例,才能访问属于它的资源。
//注意连接字符串中的xxx和yyy,分别对应Access keys中的Storage account name 和 key。
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=xxx;AccountKey=yyy");
//CloudFileClient 类是 Windows Azure File Service 客户端的逻辑表示,我们需要使用它来配置和执行对 File Storage 的操作。
CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
//CloudFileShare 表示一个 File Share 对象。
CloudFileShare share = fileClient.GetShareReference(shareName);
//如果不存在就创建 File Share。
share.CreateIfNotExists();
运行上面的代码,然后打开 Storage Explorer,看到名为 ”mylogs” 的 Share 已经创建了:

上传文件
File Storage 支持真正的文件目录。所以在上传文件前需要确定要把文件上传到哪个目录下。每一个 File Share 都有一个根目录,我们可以先取到这个根目录,然后再创建子目录或是直接上传文件。下面的代码会在根目录下创建一个叫 “web”的子目录,然后上传文件 web.log 到 web 目录中:
//获得根目录的引用。
CloudFileDirectory rootDir = share.GetRootDirectoryReference();
//创建子目录 "web" 的引用。
CloudFileDirectory webDir = rootDir.GetDirectoryReference("web");
//创建子目录 "web"。
webDir.CreateIfNotExists();
//创建文件 "web.log" 的引用。
CloudFile cloudFile = webDir.GetFileReference("web.log");
string localFile = @"F:\temp\web.log";
using (var fileStream = System.IO.File.OpenRead(localFile))
{
//上传文件。
cloudFile.UploadFromStream(fileStream);
}
在Storage Explorer 中检查下结果:

复制文件
Azure Storage 支持在 Blob Storage 和 File Storage 之间相互复制文件,但这样的操作涉及的访问权限管理相对复杂一些。本文仅介绍文件在同一个 File Storage 中的复制操作。下面的代码复制 web.log 文件并创建 web.copy.log 文件:
CloudFileShare share = GetFileShare(_currentShareName);
CloudFileDirectory rootDir = share.GetRootDirectoryReference();
CloudFileDirectory webDir = rootDir.GetDirectoryReference("web");
CloudFile cloudFile = webDir.GetFileReference("web.log");
if (cloudFile.Exists())
{
//由 web.log 文件创建 web.copy.log 文件。
CloudFile copyFile = webDir.GetFileReference("web.copy.log");
copyFile.StartCopy(cloudFile);
}
查看复制操作的结果:

设置 Share 的最大容量
前面我们提到每个 Share 中最多能存放5TB 的数据。但有时可能需要限制一下它的最大值,比如最多只能存放1TB 的数据:
//指定最大容量为 1024,单位是GB。
share.Properties.Quota = ;
share.SetProperties();
代码很简单,如果想要查看 Share 的最大容量是多少,直接取share.Properties.Quota 属性的值就可以了。
现在我们在云端有一个 1TB 大小的共享目录,如何使用呢?
把 Share 映射为本地机器的网络硬盘
用管理员权限启动 cmd.exe,执行下面的命令:
cmdkey /add:<storage-account-name>.file.core.windows.net /user:<storage-account-name> /pass:<storage-account-key>
net use z: \\<storage-account-name>.file.core.windows.net\mylogs
注意,请把上面命令中的 < storage-account-name > 和 < storage-account-key >进行替换。
再用非管理员权限启动 cmd.exe,再执行一次net use 命令:
net use z: \\<storage-account-name>.file.core.windows.net\mylogs
如果不第二次执行 net use 命令,资源管理器中是看不到驱动器盘符的:

注意:一定要在防火墙 Outbound 规则中放行 SMB 协议使用的 TCP 445端口。
这就搞定了!看起来还不错吧?
总结
虽然我们看到File Storage 和前文中介绍的Blob Storage 存在着很多相似的地方,但本质上它们是不一样的。Blob Storage 本质上是一个个网络上的文件,而 File Storage 则是通过 SMB 协议实现的网络共享文件,能够被操作系统映射成本地的磁盘是其最大特征。也只有这一点才能让应用程序通过文件操作API,完成对远程文件的访问。
相关阅读:
Azure Blob Storage 基本用法 -- Azure Storage 之 Blob
Azure Queue Storage 基本用法 -- Azure Storage 之 Queue
Azure Table storage 基本用法 -- Azure Storage 之 Table
Azure File Storage 基本用法 -- Azure Storage 之 File的更多相关文章
- Azure Queue Storage 基本用法 -- Azure Storage 之 Queue
Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在<Azure File Storage 基 ...
- Azure Blob Storage 基本用法 -- Azure Storage 之 Blob
Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在<Azure Table storage ...
- Azure Table storage 基本用法 -- Azure Storage 之 Table
Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table,其中的 Table 就是本文的主角 Azure Tabl ...
- Windows Azure Storage (20) 使用Azure File实现共享文件夹
<Windows Azure Platform 系列文章目录> Update 2016-4-14.在Azure VM配置FTP和IIS,请参考: http://blogs.iis.net/ ...
- [Windows Azure] How to use the Queue Storage Service
How to use the Queue Storage Service version 1.7 version 2.0 This guide will show you how to perform ...
- [Windows Azure] How to use the Table Storage Service
How to use the Table Storage Service version 1.7 version 2.0 This guide will show you how to perform ...
- 【Azure 存储服务】Java Azure Storage SDK V12使用Endpoint连接Blob Service遇见 The Azure Storage endpoint url is malformed
问题描述 使用Azure Storage Account的共享访问签名(Share Access Signature) 生成的终结点,连接时遇见 The Azure Storage endpoint ...
- Windows Azure Storage (6) Windows Azure Storage之Table
<Windows Azure Platform 系列文章目录> 最近想了想,还是有必要把Windows Azure Table Storage 给说清楚. 1.概念 Windows Azu ...
- [New Portal]Windows Azure Storage (14) 使用Azure Blob的PutBlock方法,实现文件的分块、离线上传
<Windows Azure Platform 系列文章目录> 相关内容 Windows Azure Platform (二十二) Windows Azure Storage Servic ...
随机推荐
- react组件的生命周期
写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...
- 旺财速啃H5框架之Bootstrap(五)
在上一篇<<旺财速啃H5框架之Bootstrap(四)>>做了基本的框架,<<旺财速啃H5框架之Bootstrap(二)>>篇里也大体认识了bootst ...
- C# Excel导入、导出【源码下载】
本篇主要介绍C#的Excel导入.导出. 目录 1. 介绍:描述第三方类库NPOI以及Excel结构 2. Excel导入:介绍C#如何调用NPOI进行Excel导入,包含:流程图.NOPI以及C#代 ...
- Vue-Router 页面正在加载特效
Vue-Router 页面正在加载特效 如果你在使用 Vue.js 和 Vue-Router 开发单页面应用.因为每个页面都是一个 Vue 组件,你需要从服务器端请求数据,然后再让 Vue 引擎来渲染 ...
- Android数据加密之异或加密算法
前言: 这几天被公司临时拉到去做Android IM即时通信协议实现,大致看了下他们定的协议,由于之前没有参与,据说因服务器性能限制,只达成非明文传递,具体原因我不太清楚,不过这里用的加密方式是采用异 ...
- 操作系统篇-分段机制与GDT|LDT
|| 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言 在<操作系统篇-浅谈实模式与保护模式>中提到了两种模式,我们说在操作系统中,其实大部分时间是待在保护模式中的. ...
- 一个技术汪的开源梦 —— 公共组件缓存之分布式缓存 Redis 实现篇
Redis 安装 & 配置 本测试环境将在 CentOS 7 x64 上安装最新版本的 Redis. 1. 运行以下命令安装 Redis $ wget http://download.redi ...
- SharePoint 2016 入门视频教程
之前一直有朋友让自己录一些SharePoint的入门视频,之前没有太多时间,一个巧合的机会收到CSDN学院的邮件,可以在CSDN上发布视频教程,自己就录了一些.说起录视频也是蛮辛苦的,每天下班吃完饭要 ...
- AFN解析器里的坑
AFN框架是用来用来发送网络请求的,它的好处是可以自动给你解析JSON数据,还可以发送带参数的请求AFN框架还可以监测当前的网络状态,还支持HTTPS请求,分别对用的类为AFNetworkReacha ...
- Centos 7 vsftpd ldap 配置
#ldap 安裝配置 环境Centos7#安装 yum install -y openldap openldap-clients openldap-servers migrationtools pam ...