博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenStack Swift client开发
阅读量:7000 次
发布时间:2019-06-27

本文共 2306 字,大约阅读时间需要 7 分钟。

hot3.png

如果你搭建好了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文件,然后打印出来。

上代码

#!/usr/bin/env pythonimport httplibimport jsonfrom urlparse import urlparse, urlunparse, urljoinfrom urllib import quote from eventlet.green.httplib import HTTPConnection def http_connection(url):	'''	test http_connection	'''	parsed = urlparse(url)	conn = HTTPConnection(parsed.netloc)	return parsed, conndef json_request(method, url, **kwargs):	kwargs.setdefault('headers', {})	kwargs['headers']['Content-Type'] = 'application/json'	kwargs['body'] = json.dumps(kwargs['body'])	parsed, conn = http_connection(url)	conn.request(method, parsed.path, **kwargs)	resp = conn.getresponse()	body = resp.read()	body = json.loads(body)	return resp, bodydef get_auth():	url = 'http://192.168.4.87:5000/v2.0/'	body = {'auth':	{'passwordCredentials': {'password': 'zhoubing',		'username':'swift'},'tenantName': 'service'}}	token_url = urljoin(url, "tokens") 	resp, body = json_request("POST", token_url, body=body)	token_id = None	try:		url = None		catalogs = body['access']["serviceCatalog"]		for service in catalogs:			if service['type'] == 'object-store':				url = service['endpoints'][0]['publicURL']		token_id = body['access']['token']['id']	except(KeyError,IndexError):	    print Error	return url, token_iddef get_object():	url, token = get_auth()	parsed, conn = http_connection(url)	path = '%s/%s/%s' % (parsed.path, quote('myfile'), quote('asd.txt'))	method = 'GET'	headers = {'X-Auth-Token': token}	conn.request(method, path,'',headers)	resp = conn.getresponse()	body = resp.read()	print bodyif __name__ == '__main__':	get_object()

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

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

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

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

转载于:https://my.oschina.net/zhouxingxing/blog/77004

你可能感兴趣的文章
Chapter 1:Introduction
查看>>
Emscripten教程之连接C++和JavaScript(三)
查看>>
[转]Hyper-V Guest OS啟用Jumbo Frame-使用Windows Server 2012 Beta 測試
查看>>
Wireshark图解教程
查看>>
使用 NuGet 下载最新的 Rafy 框架及文档
查看>>
在VS中添加lib库的三种方法
查看>>
WPF 的毛玻璃效果
查看>>
QQ坦白说异常火爆!小伙平凡遭到妹子表白,编程技术是时候登场了
查看>>
回顾小程序 2018 年三足鼎立历程,2019 年 BAT 火力全开!
查看>>
PHP开发:架构师三十秒轻松总结 “PHP入门小知识”
查看>>
我只想深耕技术写代码,公司却把我推上管理岗,怎么办?
查看>>
这些研发管理经验,聚合起了8000余名技术人员
查看>>
多项福利提高老用户满意度,华为打造有温度的手机品牌
查看>>
华兴资本确定IPO发行价 募集资金将达3.96亿美元
查看>>
登录五大联赛!国足当家前锋武磊确定加盟西班牙人
查看>>
2019年“欢乐春节”系列活动在曼谷启动
查看>>
日本奥委会主席公开否认东京申奥“贿选”
查看>>
马云关于商业与科技结合的奥秘,阿里云生态作出了诠释
查看>>
深入理解 MyBatis的二级缓存的设计原理
查看>>
Mysql中使用流式查询避免数据量过大导致OOM
查看>>