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 典型的应用场景:

  1. 轻松迁移那些有磁盘读写操作的应用到云端。不用修改程序,只要通过 File Storage 加载相应的文件即可。
  2. 存放共享的应用程序配置文件。
  3. 存放日志等应用程序诊断数据。
  4. 存放管理员的常用工具。

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 = 1024;
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,完成对远程文件的访问。

 

相关阅读:

最全的Windows Azure学习教程汇总

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

Azure Queue Storage 基本用法 -- Azure Storage 之 Queue

Azure Table storage 基本用法 -- Azure Storage 之 Table

 

时间: 2024-10-26 13:29:33

Azure File Storage 基本用法 -- Azure Storage 之 File的相关文章

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

Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在<Azure Table storage 基本用法>一文中,介绍了 Table Storage 的基本用法,本文将通过 C# 代码介绍 Blob Storage 的主要使用方法. 文章来源:葡萄城产品技术社区 Blob Storage 是什么? Azure Blob Storage 是用来存放大量的像文本.图片.视频等非结构化数据的存储服务.我

Azure Table storage 基本用法 -- Azure Storage 之 Table

Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table,其中的 Table 就是本文的主角 Azure Table storage. Azure Table storage 是一个在云端存储结构化 NoSQL 数据的服务,它不仅存取速度快,而且效费比高.MSDN 上的说法是:成本显著低于传统 SQL! 笔者最近在项目中用 Table storage 实现了一个日志表,在此和大家分享一下 Table stora

azure-中国版 Windows Azure 和其它地区的 Azure 服务是否相同?

问题描述 中国版 Windows Azure 和其它地区的 Azure 服务是否相同? 中国版 Windows Azure 和其它地区的 Azure 服务是否相同? 解决方案 完全不同 山寨版的 azure 不是微软的,而是第三方运营的,只是用了微软的软件.本质上和一个网吧安装了几套微软的操作系统就开张了没有什么区别. 山寨版的 azure 拥有自己的机房,和微软 azure 的数据完全独立.azure 在全球拥有 7 个数据中心,而山寨版只有北京.上海两个. 山寨版的 azure 全程受政府严

azure 数据库过大 , Azure mobile service 出错

问题描述 azure 数据库过大 , Azure mobile service 出错 Hello ! 移动服务的数据库很大,有几千万,在mobile service端的DtoController里 public IQueryable<T> GetAllTDto() { return Query(); } 会发生超时错误,如果是Query().Take(100000) 只取100万条,可以简单查询,但是返回的结果并不是数据库中按顺序排列的: 另外,我设置成100万条 universal 客户端只

Python中的file和open用法详解

file和open有什么区别? file是一个类,而用open函数打开后是返回一个file对象. file1 = file("aa.txt") file2 = open("aa.txt")#这个时候返回的是跟file1一样的对象,都可以对aa.txt进行读取,修改. 暂时发现貌似没多大区别,习惯上喜欢用open. Python 2 里基本没区别.Python 3 里没 file. Python 2 里,file 是文件对象.open 是返回新创建的文件对象的内建函数

SAP WM Storage Type启用SUM之后需要指定storage type允许的Storage Unit Type

SAP WM Storage Type启用SUM之后需要指定storage type允许的Storage Unit Type                      

SAP WM 为Storage Type启用SUM后要为Storage Unit Type指派Storage Bin Type

SAP WM 为Storage Type启用SUM后要为Storage Unit Type指派Storage Bin Type                                

html5的File相关api用法介绍

一. File和Blob 一个Blob对象就是一个包含有只读原始数据的类文件对象.Blob对象中的数据并不一定得是JavaScript中的原生形式.File接口基于Blob,继承了Blob的功能,并且扩展支持了用户计算机上的本地文件. 创建Blob对象的方法有几种,可以调用Blob构造函数,还可以使用一个已有Blob对象上的slice()方法切出另一个Blob对象,还可以调用canvas对象上的toBlob方法. 以上为MDN上官方口吻的解释.实际上,Blob是计算机界通用术语之一,全称写作:B

【COCOS2DX-LUA 脚本开发之十三】解决COCOS2DX-LUA编译到ANDROID找不到CCLUAENGINE、HELLOWORLD或出现GET DATA FROM FILE(XXX.LUA) FAILED/CAN NOT GET FILE DATA OF XXX.LUA、COCOS2DX

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/lua-game/1368.html 对于跨平台整合,Himi已经写了1.x 与 2.x 的了,还不知道如何整合的请移步到 [Cocos2d-X(2.x) 游戏开发系列之二]cocos2dx最新2.x版本跨平台整合NDK+Xcode,Xcode编写&编译代码,Android导入打包运行即可!) 本篇只是解决在整合cocos2dx-lua项目会