openstack swift java_OpenStack Swift client开发

韩喜
2023-12-01

如果你搭建好了Swift环境 ,你应该可以通过Swift 命令 来尝试去测试上传下载等功能,这是因为在安装Swift的时候,通常会安装一个python-swiftclient客户端,这个一个python的开源 项目 同样使用apache2.0许可,是Swift的client端,如果你使用java PHP  在github上同样有对应的client端,但是功能有局限性。

开源的好处就是,可以方便学习,第一次看python代码,整理出来流程,加上自己的环境,可以马上就开始应用起来。

Swift 基于HTTP协议,所以不论你用什么语言,只要通过HTTP发送消息给Swift,都可以获取相应的数据,或者进行相应的操作。当然对于定制的需求 你需要修改Swift源码。来实现响应的处理。Swift的API文档在官方网站上可以获取到。

python-client的源码非常简单,可以在github上下载,仔细看一下就是一个简单的HTTP客户端,通过shell命令 输入鉴权url username password 和具体的参数 来调用swift service 。

自己写一个小程序 实现如下功能,下载swift服务器上的hello.txt文件,然后打印出来。

01

#!/usr/bin/env python

02

03

import httplib

04

import json

05

06

from urlparseimport urlparse, urlunparse, urljoin

07

from urllibimport quote

08

from eventlet.green.httplibimport HTTPConnection

09

10

def http_connection(url):

11

'''

12

test http_connection

13

'''

14

parsed= urlparse(url)

15

conn= HTTPConnection(parsed.netloc)

16

return parsed, conn

17

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()

25

body= resp.read()

26

body= json.loads(body)

27

return resp, body

28

29

def get_auth():

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)

35

token_id= None

36

try:

37

url= None

38

catalogs= body['access']["serviceCatalog"]

39

for servicein catalogs:

40

if service['type']== 'object-store':

41

url= service['endpoints'][0]['publicURL']

42

token_id= body['access']['token']['id']

43

except(KeyError,IndexError):

44

print Error

45

return url, token_id

46

47

def get_object():

48

url, token= get_auth()

49

parsed, conn= http_connection(url)

50

path= '%s/%s/%s' % (parsed.path, quote('myfile'), quote('asd.txt'))

51

method= 'GET'

52

headers= {'X-Auth-Token': token}

53

conn.request(method, path,'',headers)

54

resp= conn.getresponse()

55

body= resp.read()

56

print body

57

58

if __name__== '__main__':

59

get_object()

第一次写python代码 比较乱 主要是理清思路,熟悉代码的流程。

实用keystone作为swift的鉴权,首先通过get_auth() 获得鉴权的token 和proxy的url

通过get_connection获得连接 然后根据API文档,组成相应的http消息得到,相应的resp,然后通过read()方法读文件的能容

很简单,进行相应的封装,再加上UI就是一个云存储客户端的雏形了!

 类似资料: