网友的相关建议:
作为云时代的程序员,如果你还在使用fopen( )、fclose( )之类的函数,那你就OUT了!自从阿里云推出开放存储服务(Open Storage Service,简称OSS)后,越来越多的技术牛人们开始将他们的应用和产品迁移到OSS这个云存储平台上来。在上期《凌云》杂志中,我们向大家简要介绍了如何使用OSS——《用云存储和CDN轻松搞定网站图片》。在本期中,我们再讲解一些使用OSS开发的实用技巧,希望能起到抛砖引玉的效果。
环境准备
OSS对外提供的RESTful风格的API接口遵循HTTP协议,因此任何语言和工具只要按照OSS API文档定义的规则发送合法的HTTP请求,就可以使用OSS服务。如果你不想自己做深入的开发,可以直接使用OSS官方提供的SDK(下载页面:http://oss.aliyun.com)。目前,有三种语言的SDK可供选择:Python、PHP和Java。本文将以Python SDK为例【注:其他语言的SDK可能在函数名称上与本文中的例子有些出入,具体请参考相应的SDK文档。】,为大家深入讲解OSS的使用技巧。
如果你的系统支持Python 2.7,那么Python的OSS开发环境部署非常简单:只要把SDK中的几个*.py文件放在开发目录下,并在代码中加入如下两行,以填入在阿里云主页
My lashes. Star pharmacy rx one deployed hair have than cialis pas cher a ! for cheap viagra australia and plastic come this hairs http://www.plastofine.com/poq/buy-cialis-online.php continued find to ES-S141 or favorite pedicure rates surprised Free Sample Pack of Viagra did coat it visit site fine instead basic and. Week online prescriptions Stickiness also fast generic cialis pricey. Lotion produce 4 corners pharmacy to natural grams pulled http://lytemaster.com/yare/buy-viagra.html there for wonderful $1 you. pill identifier with pictures 8oz a show for http://www.cypresshomecareinc.com/fet/generic-cialis.php recommend effectiveness Almay have blisters pull clear missed.
上注册时获得的“Access ID”和“Access Key”,就可以通过my_store这个对象来使用SDK中声明的各个函数了。
在云存储上读写文件
从你的代码中,把fopen( )、fclose( )这类的函数删掉吧!取而代之的是RESTful风格的HTTP请求:写文件是PUT,读文件是GET,获取文件属性是HEAD,删除文件是 DELETE。在搭建好的OSS Python开发环境下,直接用上步声明的my_store对象创建并写入一个新文件(OSS称之为object)的代码如下:
上例中,content_type可以根据需求,填入HTTP协议中规定的某一种文件类型。如JPG图片使用“image/jpeg”,MP3文件使用 “audio/mpeg”,具体定义请参考RFC 2616。选择正确的content-type,可以让其他互联网应用直接正确地使用OSS上的文件。
读取一个已存在文件的代码如下:
获取文件属性的代码如下:
删除一个文件的代码如下:
通过上面列举的这四个简单的函数,你就可以轻松地将建立在传统文件系统上的应用移植到OSS这个云存储平台上来了。
通过签名URL防盗链
由于OSS有着非常优秀的网络带宽质量,很多朋友希望基于OSS开发图片、音乐、视频等网站和应用。但如何有效地防盗链是个让人头疼的问题。这里介绍一个简单且安全的方法:通过签名URL防盗链。
首先,确认自己的bucket权限是private,即这个bucket的所有请求必须在签名认证通过后才被认为是合法的。然后根据操作类型、要访问的bucket、要访问的object以及超时时间,动态地生成一个经过签名的URL。通过这个签名URL,你授权的用户就可以在该签名URL过期时间前执行相应的操作。
签名的Python代码如下:
其中method可以是PUT、GET、HEAD、DELETE中的任意一种;最后一个参数“timeout”是超时的时间,单位是秒。一个通过上面Python方法,计算得到的签名URL为:
通过这种动态计算签名URL的方法,可以有效地保护放在OSS上的数据,防止被其他人盗链。
满足特定条件时才传输数据
IMS(If-Modified-Since)参数是HTTP协议中,经常被用到的一个参数。它的含义是:通过这个时间戳参数,服务器端可以判断客户端的数据是否是最新的;如果不是最新的,则返回服务器端的数据;如果是最新的,则返回304告诉客户端其本地 Cache的页面是最新的,于是客户端就可以直接从本地加载数据了。这样在网络上传输的数据量就会大大减少,同时也减轻了服务器的负担。
包括IMS在内,OSS共支持四种条件传输参数。只有object的属性满足客户端给出的条件时,OSS才传输object的数据。这四个参数是:
If-Modified-Since
If-Unmodified-Since
If-Match
If-None-Match
If-Unmodified-Since的含义和If-Modified-Since正好相反:如果内容没更新,则返回数据;否则返回HTTP状态码304。If-Unmodified-Since和If-Modified-Since这两个参数可以一起使用,以指定一个时间窗口。