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