玩转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 进程的工具已存在一段时间.过去几年中 ...
随机推荐
- 分享一组很赞的 jQuery 特效【附源码下载】
作为最优秀的 JavaScript 库之一,jQuery 不仅使用简单灵活,同时还有许多成熟的插件可供选择,它可以帮助你在项目中加入漂亮的效果.这篇文章挑选了8个优秀的 jQuery 实例教程,这些 ...
- CSS3简单动画
css3的动画确实非常绚丽!浏览器兼容性很重要!. 分享两个小动画 <!doctype html> <html lang="en"> <head> ...
- HtmlEncode和JavaScriptEncode(预防XSS)
在数据添加到DOM时候,我们可以需要对内容进行HtmlEncode或JavaScriptEncode,以预防XSS攻击. JavaScriptEncode 使用“\”对特殊字符进行转义,除数字字母之外 ...
- SAP查询事务、表属于哪个模块
这个功能主要是在汇报SAP的产品问题时,让你知道该选择你所汇报的问题所哪个子模块的.它可以依据事务代码.表.程序名.域.数据元素来查找. 方法:SE38,执行报表程序:RSSTATUS .
- 解决方案:带格式化文本控件( RichText)的模板如果在InfoPath的浏览器中加载可能出现 COM 组件的80040154错误
建议大家在微软的组件出现问题时,在GOOGLE上搜索解决方案,一般来说,总有结果: 带格式化文本控件( RichText)的模板如果在InfoPath的浏览器中加载,可能出现 COM 组件的80 ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q95-Q98)
Question 95 Your development team has asked you to help them determine the cause of an error in a ...
- VSS提示"Could not find the Visual SourceSafe Internet Web Service connection information for the specified database
转自:http://www.cnblogs.com/qqflying/archive/2007/12/18/1004051.html VSS连接错误提示: ====================== ...
- Android Studio git 版本回退到最新的版本
1.场景 1.1 最新三次的提交 分别是:定义了一个变量k = 10 . 定义了一个变量 j = 6 . 定义了一个变量 i = 5 ; 本地仓库 和 远程仓库保持一致 1.2 我添加了一行代码 ...
- eclipse中使用javadoc生成文档
1.Javadoc command:输入 [jdk路径]\javadoc.exe 2.Extra Javadoc options输入 -windowtitle '标题'-encoding UTF-8 ...
- iOS网络监测方法
方法一(官方): Reachability ============================================================================== ...