文件的上传,下载,复制,删除等操作。代码执行的结果,本文使用了 MS 发布的一个 Azure Storage 客户端工具:,文中简称为 Storage Explorer。
文件进行操作,需要提供访问 Storage Account 的认证信息。我们的方式是直接通过 New-AzureStorageContext 命令创建一个 AzureStorageContext 类型的对象,这个对象中包含了认证信息,所以接下来所有对 storage 的访问操作都需要使用它:
添加必要的认证选项外,我们还显式的指定了通信协议。指定 https 是非常重要的,因为以 https 协议上传下载的数据默认会进行数据的完整性校验。也就是说在进行文件的上传或者下载时,我们不需要再做额外的数据完整性校验了。
登录,然后找到某个(或者是创建一个) Storage Account,并获取其 Context 属性。
文件的操作前,我们需要先创建一个 Container:
文件,当前一共有三个权限类型:Container:匿名用户可以访问文件内容,并且可以枚举 Container 中的所有文件。Blob:匿名用户可以访问文件内容,但是不能枚举 container 中的文件。Off:匿名用户不能访问文件。生成的对象 $ctx。
上传文件
上传文件,需要指定文件存放的 Container 和 访问 Storage Account 的上下文:
上传成功后我们可以通过 Storage Explorer 直观的检查一下:
上传的文件都是直接放在 Container 的根目录下的,如果要对文件存放的目录进行管理,需要在上传时指定包含目录名称的文件名:
上传后,文件 cortana.jpg 会存放在 images 目录下。
上传一个文件,并指定了一个已经存在的 blob 名称,此时会与用户交互以确定是否覆盖已经存在的 blob。对于各种自动化的任务,我们不希望交互的行为,所以可以加上 -Force 选项强制覆盖已有文件:
文件
文件路径为:"D:\images\cortana.jpg"。
名称,我们需要下载满足某些情况的 blob,比如下载 images 目录下的所有文件。这里的问题是我们不知道 images 究竟是哪级目录,所以可能的做法是遍历 Container 下的所有文件,然后检查文件名称中包含 images 目录的文件并下载它。为了遍历 Container 中的文件,需要使用 Get-AzureStorageBlob 命令:
代码中我们用 Get-AzureStorageBlob 命令拿到 Container 下的所有文件信息,然后检查文件的路径中有没有包含 "images/" 字符串,如果包含,就下载这个文件。
文件
自动化的脚本操作可以轻松愉快的备份各种数据,当然也包含存储在 Storage Account 中的文件。Start-AzureStorageBlobCopy 命令用于 blob 文件的复制操作。单从名字上看这应该是个异步方法,但是真实的情况稍微复杂一些。因为这个命令既可以用于同步操作也可以用于异步操作,关键在于调用这个命令的方式!下面的命令在同一个 Container 中执行文件复制操作:
文件拷贝到同一个 Container 的 myimages 目录下。
文件,建议你通过异步的方式进行:
删除文件
删除指定的 blob 文件:
文件来完成。