玩转Windows Azure存储服务——网盘
存储服务是除了计算服务之外最重要的云服务之一。说到云存储,大家可以想到很多产品,例如:AWS S3,Google Drive,百度云盘...而在Windows Azure中,存储服务却是在默默无闻的工作着,以至于除了虚拟机磁盘,大家都不知道Windows Azure的存储还能做些什么。的确,如果只是从Windows Azure的管理控制台来看,用户能针对Windows Azure存储所做的操作寥寥无几。也许,微软的初衷是将Windows Azure存储定位成面向开发人员的服务——Windows Azure存储提供了丰富的SDK和RESTful API,还有PowerShell和CLI。
接下来,我们通过模拟一个真实的场景来熟悉Windows Azure存储的强大功能,这个场景就是网盘——我们把Windows Azure存储当网盘使用。我们使用PowerShell来进行演示,同理,用其他语言的SDK或者RESTful API亦可实现同样的功能。我们假定这篇文章的读者已经掌握Windows Azure存储相关的基本概念和Windows Azure PowerShell的基本操作。
首先我们来定义一个存储账号上下文(context),在存储账号上下文中指定要使用的存储账号和访问密钥。
$saContext=New-AzureStorageContext -StorageAccountName [存储账户名称] -StorageAccountKey [存储账号访问密钥]
有了这个存储账号上下文,相当于为我们的网盘安了一个家,准备开工喽~~~
Windows Azure Blob存储没有文件夹的概念,只有容器(Container),而且容器只有1层,不能像目录那样一层套一层。
列目录——看看我们的存储账号中有哪些容器:
Get-AzureStorageContainer -Context [存储账号上下文,例如:前文中定义的变量$saContext]
列文件——列出指定容器中的文件:
Get-AzureStorageBlob -Container [容器名称] -Context [存储账号上下文,例如:前文中定义的变量$saContext]
上传文件——将本地文件上传到指定的容器中:
Set-AzureStorageBlobContent -File [本地待上传的文件完整路径,例如:d:\data\demo.txt] -Container [容器名称] -Context [存储账号上下文]
上传文件——批量上传:
Get-ChildItem –Path [本地待上传的带通配符的文件路径,例如:d:\data\*] | Set-AzureStorageBlobContent -Container [容器名称] -Context [存储账号上下文]
文件下载——下载容器中的文件到本地:
Get-AzureStorageBlobContent -Blob [容器中待下载的文件名称] -Destination [本地目标路径] -Container [容器名称] -Context [存储账号上下文]
至此,基本的网盘功能都已经实现了。不可否认,这的确是“only for technical guy”的。别忘了,咱可是玩技术的,基于Windows Azure的存储服务开发一个专用的网盘系统是不是变得很简单了?
再来点高级的功能——网盘文件分享。
Windows Azure Blob存储上的每一个文件都会对应一个唯一的URL,例如:[https://sa4blobtest.blob.core.chinacloudapi.cn/c001/demo-file.html]。理论上,把这个URL复制到浏览器中,就可以打开或者下载对应的文件了。但是,容器的权限默认是:Private,所以也就无法通过URL来分享文件了。除非我们把整个容器的权限设置为:Public Container。说句题外话,Public Container非常适合发布网站的静态内容,例如:css文件,JavaScript文件,图片等。并且还有很重要的一点:通过Windows Azure Blob发布的静态文件可以使用Windows Azure的CDN分发服务!这个的确是Windows Azure存储服务的一大特色。
言归正传,我们来看看如何使用Windows Azure存储服务来实现文件分享。
创建一个SAS key
New-AzureStorageBlobSASToken -Context [存储账号上下文] Container [容器名称] -Blob [容器中待分享的文件名] -Permission r -FullUri
上述命令执行后,会生成一个链接,例如:[https://sa4blobtest.blob.core.chinacloudapi.cn/c001/t01.css?sv=2015-02-21&sr=b&sig=FKeZ8ecCNXLSOOry90R%2FoiDUJwvn7W%2Fe
w6%2BNfbAw6XM%3D&se=2015-11-17T09%3A47%3A05Z&sp=r]。这个链接就是分享链接!配合[-StartTime]和[-ExpiryTime]参数,还可以为分享链接设置有效期。是不是很感动?沿袭了微软开发工具的优良传统,时时处处为开发人员着想。
到此为止,我们成功的把Windows Azure存储服务打造成为一个安全,高效,大容量的网盘。至于操作界面的用户体验嘛,让我们一起发挥想象力和创造力来慢慢完善吧。
玩转Windows Azure存储服务——网盘的更多相关文章
- 玩转Windows Azure存储服务——高级存储
在上一篇我们把Windows Azure的存储服务用作网盘,本篇我们继续挖掘Windows Azure的存储服务——高级存储.高级存储自然要比普通存储高大上的,因为高级存储是SSD存储!其吞吐量和IO ...
- 解读 Windows Azure 存储服务的账单 – 带宽、事务数量,以及容量
经常有人询问我们,如何估算 Windows Azure 存储服务的成本,以便了解如何更好地构建一个经济有效的应用程序.本文我们将从带宽.事务数量,以及容量这三种存储成本的角度探讨这一问题. 在使用 W ...
- Windows Azure文件共享服务--File Service
部署在Windows Azure上的虚拟机之间如何共享文件?例如:Web Server A和Web Server B组成负载均衡集群,两个服务器需要一个共享目录来存储用户上传的文件.通常,大家可能首先 ...
- 了解 Windows Azure 存储计费 – 带宽、事务和容量
我们收到关于如何估算 Windows Azure存储成本,以便了解如何更好地构建一个经济有效的应用程序的问题.在本文中,我们将从带宽.事务和容量这三种存储成本的角度探讨这一问题. 使用 Wind ...
- Windows Azure 存储的冗余存储选项和只读访问跨地域冗余存储
我们很高兴地宣布,现在我们使客户可以获得对数据更高的读取可用性.该预览功能称为"只读访问- 跨地域冗余存储(RA-GRS)",使客户可以在存储帐户主要区域无法读取数据时,通过跨 ...
- SOSP 文档 - Windows Azure 存储:具有强一致性的高可用性云存储服务
之前,我们在第 23 届 ACM操作系统原理研讨会 (SOSP)上发布了一篇文章,其中介绍了 Windows Azure存储的内部详细信息. 您可以在此处找到该文章.此次大会还发布了一段视频讲话( ...
- Windows Azure存储容器私有,公共容器,公共Blob的区别
当我们在Windows Azure中创建或编辑存储的容器时,需要选择访问类型,本文将描述一下这三个选项的区别. 1. 私有: 默认选项,顾名思义,用户不能通过URL匿名进行访问容器或容器内的任何Blo ...
- 微软开放技术开发了适用于 Windows Azure 移动服务的开源 Android SDK
发布于 2014-02-10 作者 陈 忠岳 为进一步实现连接微软与非微软技术的目标,微软开放技术有限公司开发了适用于 Windows Azure 移动服务的 Android SDK,由Scot ...
- 微软开放技术发布开源 Jenkins 插件以将 Windows Azure Blob 服务用的开作存储库
发布于 2014-02-10 作者 陈 忠岳 持续集成 (CI) 的历史源远流长, 其宗旨在于软件团队在敏捷环境中不断将他们的工作整合为持续构建.管理 CI 进程的工具已存在一段时间.过去几年中 ...
随机推荐
- 钉钉客户端JS-API权限签名算法.NET版
前段时间写了一篇博文<钉钉如何进行PC端开发>,在里面并未解决本地生成签名的问题,需要到官网进行生成,由于钉钉门票等认证信息会超期,因此,必须能本地用代码自动更新相关参数信息,来换取签名. ...
- Quartz.NET开源作业调度框架系列(五):AdoJobStore保存job到数据库
Quartz.NET 任务调度的核心元素是 scheduler, trigger 和 job,其中 trigger(用于定义调度时间的元素,即按照什么时间规则去执行任务) 和 job 是任务调度的元数 ...
- 如何在Visual Studio中开发自己的代码生成器插件
Visual Studio是美国微软公司开发的一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具.代码管控工具.集成开发环境(IDE)等等,且所写的目标代码适用于微 ...
- 值得 Web 开发人员学习的20个 jQuery 实例教程
这篇文章挑选了20个优秀的 jQuery 实例教程,这些 jQuery 教程将帮助你把你的网站提升到一个更高的水平.其中,既有网站中常用功能的的解决方案,也有极具吸引力的亮点功能的实现方法,相信通过对 ...
- 小伙伴们惊呆了!10行 JavaScript 实现文本编辑器
最近,我需要做一个非常基本的网页内容编辑功能.我不想使用 iframe ,我也不想要一个功能特别多的复杂编辑器,只需要很基本的内容编辑功能,例如粗体,斜体,列表,对齐等等. 您可能感兴趣的相关文章 分 ...
- MapGuide Maestro 5.1发布了
MapGuide Maestro最为MapGuide开源版的authoring工具真是发展迅速,有些功能比Infrastructure Studio还给力,现在5.1版已经发布了.大家可以到http: ...
- 用TypeScript开发了一个网页游戏引擎,开放源代码
最开始学习电脑编程的原动力之一就是想自己编写游戏,一方面很好奇这些游戏是怎么做出来的,另一方面觉得有些地方设计的不合理,希望电脑游戏既能让人玩的有趣,又不浪费时间. 学校五年,毕业十年,学用了十多种编 ...
- 浏览器判断是否安装APP
浏览器判断是否安装APP http://blog.csdn.net/henrywulibin/article/details/52087041 从浏览器中打开我们的应用 http://blog.csd ...
- iOS开发之动画中的时间
概述 在动画中,我们会指定动画的持续时间.例如 scaleAnimation.duration = self.config.appearDuration 那么这个时间是怎么定义的呢?是指的绝对时间吗? ...
- android之HttpClient
Apache包是对android联网访问封装的很好的一个包,也是android访问网络最常用的类. 下面分别讲一下怎么用HttpClient实现get,post请求. 1.Get 请求 HttpGet ...