如果你搭建好了Swift环境 ,你应该可以通过Swift 命令 来尝试去测试上传下载等功能,这是因为在安装Swift的时候,通常会安装一个python-swiftclient客户端,这个一个python的开源 项目 同样使用apache2.0许可,是Swift的client端,如果你使用java PHP 在github上同样有对应的client端,但是功能有局限性。
开源的好处就是,可以方便学习,第一次看python代码,整理出来流程,加上自己的环境,可以马上就开始应用起来。
Swift 基于HTTP协议,所以不论你用什么语言,只要通过HTTP发送消息给Swift,都可以获取相应的数据,或者进行相应的操作。当然对于定制的需求 你需要修改Swift源码。来实现响应的处理。Swift的API文档在官方网站上可以获取到。
http://docs.openstack.org/api/openstack-object-storage/1.0/content/
python-client的源码非常简单,可以在github上下载,仔细看一下就是一个简单的HTTP客户端,通过shell命令 输入鉴权url username password 和具体的参数 来调用swift service 。
自己写一个小程序 实现如下功能,下载swift服务器上的hello.txt文件,然后打印出来。
上代码
06 |
from urlparse import urlparse, urlunparse, urljoin |
07 |
from urllib import quote |
08 |
from eventlet.green.httplib import HTTPConnection |
10 |
def http_connection(url): |
14 |
parsed = urlparse(url) |
15 |
conn = HTTPConnection(parsed.netloc) |
18 |
def json_request(method, url, * * kwargs): |
19 |
kwargs.setdefault( 'headers' , {}) |
20 |
kwargs[ 'headers' ][ 'Content-Type' ] = 'application/json' |
21 |
kwargs[ 'body' ] = json.dumps(kwargs[ 'body' ]) |
22 |
parsed, conn = http_connection(url) |
23 |
conn.request(method, parsed.path, * * kwargs) |
24 |
resp = conn.getresponse() |
26 |
body = json.loads(body) |
30 |
url = 'http://192.168.4.87:5000/v2.0/' |
31 |
body = { 'auth' : { 'passwordCredentials' : { 'password' : 'zhoubing' , |
32 |
'username' : 'swift' }, 'tenantName' : 'service' }} |
33 |
token_url = urljoin(url, "tokens" ) |
34 |
resp, body = json_request( "POST" , token_url, body = body) |
38 |
catalogs = body[ 'access' ][ "serviceCatalog" ] |
39 |
for service in catalogs: |
40 |
if service[ 'type' ] = = 'object-store' : |
41 |
url = service[ 'endpoints' ][ 0 ][ 'publicURL' ] |
42 |
token_id = body[ 'access' ][ 'token' ][ 'id' ] |
43 |
except (KeyError,IndexError): |
48 |
url, token = get_auth() |
49 |
parsed, conn = http_connection(url) |
50 |
path = '%s/%s/%s' % (parsed.path, quote( 'myfile' ), quote( 'asd.txt' )) |
52 |
headers = { 'X-Auth-Token' : token} |
53 |
conn.request(method, path,'',headers) |
54 |
resp = conn.getresponse() |
58 |
if __name__ = = '__main__' : |
第一次写python代码 比较乱 主要是理清思路,熟悉代码的流程。
实用keystone作为swift的鉴权,首先通过get_auth() 获得鉴权的token 和proxy的url
通过get_connection获得连接 然后根据API文档,组成相应的http消息得到,相应的resp,然后通过read()方法读文件的能容
很简单,进行相应的封装,再加上UI就是一个云存储客户端的雏形了!