作者:大西guoguo_120 | 来源:互联网 | 2014-05-27 20:14
如果你搭建好了Swift环境,你应该可以通过Swift命令来尝试去测试上传下载等功能,这是因为在安装Swift的时候,通常会安装一个python-swiftclient客户端,这个一个python的开源项目同样使用apache2.0许可,是Swift的client端,如果你使用javaPHP在github
如果你搭建好了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就是一个云存储客户端的雏形了!