阿里云开放å˜å‚¨æœåŠ¡ Open Storage Service (OSS) Python SDK说明文档 =============================================================== 阿里云开放å˜å‚¨æœåŠ¡å®˜æ–¹ç½‘ç«™: http://oss.aliyun.com 阿里云开放å˜å‚¨ =============================================================== å˜å‚¨åœ¨OSS里的文件å«åš"object". 所有的object都放在bucket里é¢ã€‚ 简介 =============================================================== 这篇文档主è¦ä»‹ç»å¦‚何使用Pythonæ¥è¿›è¡ŒOSS API调用,并且介ç»osscmd 的简å•ä½¿ç”¨ã€‚ 这篇文档å‡è®¾ä½ å·²ç»ç†Ÿæ‚‰Python,熟悉OSS的相关概念,并且已ç»æ³¨å†Œäº† 阿里云的OSSæœåŠ¡ï¼Œä¸”获得了相应的IDå’ŒKEY。 å¦‚æžœä½ è¿˜æ²¡æœ‰å¼€é€šæˆ–è€…è¿˜ä¸äº†è§£OSS,请移æ¥OSS官方网站。 环境è¦æ±‚ =============================================================== Python SDK需è¦ï¼šå®‰è£…python 2.5(包括)以上且在3.0(ä¸åŒ…括)以下 的版本。 å¯ä»¥åœ¨Windowså¹³å°å’ŒLinuxå¹³å°ä½¿ç”¨ã€‚ å¦‚ä½•èŽ·å– =============================================================== 1. 打开æµè§ˆå™¨ï¼Œè¾“å…¥oss.aliyun.com 2. 找到Python SDK链接: 3. 下载åŽå¯ä»¥å¾—到类似OSS_Python_API_xxxxxxxx.tar.gz的包 4. 进入压缩包所在的目录,进行解压缩 5. 解压缩åŽå¾—到,oss文件夹和osscmd文件 使用说明 =============================================================== 使用oss_api.py =============================================================== 1. 创建bucket def put_bucket(self, bucket, acl='', headers=None): ç‰åŒcreate_bucket函数 def create_bucket(self, bucket, acl='', headers=None): å‚数说明: bucket,类型:string acl,类型:string,目å‰ä¸ºprivate,public-read, public-read-writeä¸çš„ä¸€ç§ headers, 类型:dict,默认为空 返回值说明: HTTP Response å‚è§http://docs.python.org/2/library/httplib.html def put_bucket_with_location(self, bucket, acl='', \ location='', headers=None): å‚数说明: bucket,类型:string acl,类型:string location, 类型:string headers, 类型:dict 返回值说明: HTTP Response 2. åˆ é™¤bucket def delete_bucket(self, bucket, headers=None): å‚数说明: bucket,类型:string headers, 类型:dict 返回值说明: HTTP Response 3. 修改bucket访问æƒé™ def put_bucket(self, bucket, acl='', headers=None): def create_bucket(self, bucket, acl='', headers=None): åŒ1ä¸çš„put_bucketå’Œcreate_bucket 4. 获å–bucket访问æƒé™ def get_bucket_acl(self, bucket): å‚数说明: bucket,类型:string 返回值说明: HTTP Response 5. 显示创建的bucket def get_service(self, headers=None): å‚数说明: headers, 类型:dict 返回值说明: HTTP Response def list_all_my_buckets(self, headers=None): å‚数说明: headers, 类型:dict 返回值说明: HTTP Response 6. ä¸Šä¼ object def put_object_from_string(self, bucket, object,\ input_content,\ content_type=DefaultContentType,\ headers=None, params=None): å‚数说明: bucket,类型:string object,类型:string input_content,类型:string content_type,类型:string headers,类型:dict params,类型:dict 返回值说明: HTTP Response def put_object_from_file(self, bucket, object,\ filename, content_type='',\ headers=None, params=None): å‚数说明: bucket,类型:string object,类型:string filename,类型:string,本地需è¦ä¸Šä¼ 的文件å content_type,类型:string,object的类型 headers,类型:dict params,类型:dict 返回值说明: HTTP Response 7. æ˜¾ç¤ºä¸Šä¼ çš„object def get_bucket(self, bucket, prefix='', marker='',\ delimiter='', maxkeys='', headers=None): åŒlist_bucket def list_bucket(self, bucket, prefix='', marker='',\ delimiter='', maxkeys='', headers=None): å‚数说明: bucket,类型:string prefix,类型:string marker,类型:string delimiter,类型:string maxkeys,类型:string headers,类型:dict 返回值说明: HTTP Response 8. åˆ é™¤object def delete_object(self, bucket, object, headers=None): å‚数说明: bucket,类型:string object,类型:string headers,类型:dict 返回值说明: HTTP Response 9. 下载object def get_object_to_file(self, bucket, object,\ filename, headers=None): å‚数说明: bucket,类型:string object,类型:string filename,类型:string, å°†object内容下载到本地文件的文件å headers,类型:dict 返回值说明: HTTP Response 10. 使用示例: 在解压的oss目录下,创建一个测试文件test.py内容如下, 并将ACCESS_IDå’ŒSECRET_ACCESS_KEY的内容填写æ£ç¡®ï¼Œ 并且将BUCKET填写一个唯一的åå—。 #!/usr/bin/env python #coding=utf8 import time from oss_api import * from oss_xml_handler import * HOST="oss.aliyuncs.com" ACCESS_ID = "" SECRET_ACCESS_KEY = "" #ACCESS_ID and SECRET_ACCESS_KEY 默认是空, #请填入您申请的æ£ç¡®çš„IDå’ŒKEY. BUCKET = "" #bucket 默认是空,请填入唯一的bucketå称 #例如test-bucket-20130101ç‰å¸¦å”¯ä¸€æ—¥æœŸçš„bucketåå—. def check_not_empty(input, msg=""): if not input: print "Please make sure %s not empty!" % msg exit(-1) def check_res(res, msg=""): if res.status / 100 == 2: print "%s OK" % msg else: print "%s FAIL" % msg print "ret:%s" % res.status print "request-id:%s" % res.getheader("x-oss-request-id") print "reason:%s" % res.read() exit(-1) if __name__ == "__main__": #åˆå§‹åŒ– check_not_empty(ACCESS_ID, "ACCESS_ID") check_not_empty(SECRET_ACCESS_KEY, "SECRET_ACCESS_KEY") oss = OssAPI(HOST, ACCESS_ID, SECRET_ACCESS_KEY) #创建属于自己的bucket bucket = BUCKET check_not_empty(bucket, "bucket") acl = 'private' headers = {} res = oss.put_bucket(bucket, acl, headers) check_res(res, "create bucket") #列出创建的bucket res = oss.get_service() check_res(res, "list all buckets") #把指定的å—ç¬¦ä¸²å†…å®¹ä¸Šä¼ åˆ°bucketä¸,在bucketä¸çš„文件åå«object。 object = "object_test" input_content = "hello, OSS" content_type = "text/HTML" headers = {} res = oss.put_object_from_string(bucket, object, input_content, content_type, headers) check_res(res, "upload from string") #指定文件å, æŠŠè¿™ä¸ªæ–‡ä»¶ä¸Šä¼ åˆ°bucketä¸,在bucketä¸çš„文件åå«object。 object = "object_test" filename = __file__ content_type = "text/HTML" headers = {} res = oss.put_object_from_file(bucket, object, filename, content_type, headers) check_res(res, "upload from localfile") #下载bucketä¸çš„object,内容在bodyä¸ object = "object_test" headers = {} res = oss.get_object(bucket, object, headers) check_res(res, "download object") #下载bucketä¸çš„objectï¼ŒæŠŠå†…å®¹å†™å…¥åˆ°æœ¬åœ°æ–‡ä»¶ä¸ object = "object_test" headers = {} filename = "get_object_test_file" res = oss.get_object_to_file(bucket, object, filename, headers) if os.path.isfile(filename): os.remove(filename) check_res(res, "download object to localfile") #查看bucketä¸æ‰€æ‹¥æœ‰çš„æƒé™ res = oss.get_bucket_acl(bucket) check_res(res, "get bucket acl") #列出bucketä¸æ‰€æ‹¥æœ‰çš„object prefix = "" marker = "" delimiter = "/" maxkeys = "100" headers = {} res = oss.get_bucket(bucket, prefix, marker, delimiter, maxkeys, headers) check_res(res, "list objects in bucket") #åˆ é™¤bucketä¸çš„object object = "object_test" headers = {} res = oss.delete_object(bucket, object, headers) check_res(res, "delete object") #åˆ é™¤bucket res = oss.delete_bucket(bucket) check_res(res, "delete bucket") 11. 示例的预期结果: create bucket OK list all buckets OK upload from string OK upload from localfile OK download object OK download object to localfile OK get bucket acl OK list objects in bucket OK delete object OK delete bucket OK 使用osscmd =============================================================== 1. 在Linux上安装 osscmd. sudo rm -r /usr/local/oss sudo mkdir -p /usr/local/oss sudo tar -zxf oss.tar.gz -C /usr/local/oss sudo rm -f /usr/bin/osscmd sudo ln -s /usr/local/oss/osscmd /usr/bin/osscmd sudo chmod 755 /usr/local/oss/osscmd 在Windows上安装osscmd 解压缩包 2. è¿è¡Œ"python osscmd config --id=YOUR_ID --key=YOUR_KEY" 用æ¥é…置访问OSS所需è¦çš„认è¯ç 3. è¿è¡Œ"python osscmd getallbucket" 列出创建的bucket. 如果是刚刚使用OSSçš„ç”¨æˆ·å› ä¸ºæ²¡æœ‰åˆ›å»ºbucket,输出是空 4. è¿è¡Œ"python osscmd createbucket mybucket" 创建一个åå— å«mybucketçš„bucket,有å¯èƒ½ä¸æˆåŠŸï¼Œè¿™ä¸ªæ—¶å€™éœ€è¦æ¢ä¸€ä¸ªåå—。 å› ä¸ºOSSä¸çš„bucketåå—是全局唯一的。 5. å¯ä»¥å†æ¬¡è¿è¡Œ"python osscmd getallbucket" 查看是å¦åˆ›å»ºæˆåŠŸã€‚ 如果没有æˆåŠŸè¯·æ£€æŸ¥osscmd返回的错误信æ¯ã€‚ 6. æˆåŠŸåˆ›å»ºbucketåŽã€‚è¿è¡Œ"python osscmd list oss://mybucket/", 查看bucketä¸æœ‰å“ªäº›object。 由于bucketä¸è¿˜æ²¡æœ‰ object,输出是空的。 7. å‘bucketä¸ä¸Šä¼ 一个object. $ md5sum my_local_file 7625e1adc3a4b129763d580ca0a78e44 my_local_file $ python osscmd put my_local_file oss://mybucket/myobject 8. 如果创建æˆåŠŸï¼Œå†æ¬¡è¿è¡Œ"python osscmd list oss://mybucket/" 9. 从bucketä¸ä¸‹è½½object到本地文件,并比对下载的文件的md5值 $ python osscmd get oss://mybucket/myobject local_file $ md5sum local_file 7625e1adc3a4b129763d580ca0a78e44 local_file 10. åˆ é™¤bucketä¸çš„object $ python osscmd delete oss://mybucket/myobject 11. åˆ é™¤bucket, 注æ„,如果bucketä¸æœ‰object或者parts 则这个bucketä¸èƒ½è¢«åˆ 除 $ python osscmd deletebucket test-oss-aliyun-com ChangeHistory =============================================================== 0.3.2 - 2013-10-20 * ä¿®å¤osscmdçš„uploadfromdir命令ä¸ï¼Œåœ¨ä¸æ–‡ç›®å½•ä¸‹ï¼Œä¸Šä¼ çš„objectåå—被截æ–的问题。 * ä¿®å¤oss_util.pyä¸DEBUG被设置æˆTrueçš„æƒ…å†µä¸‹æ— æ³•æ‰“å°log的问题。 * oss_api.pyä¸å¢žåŠ 了设置æ¯æ¬¡ä¸Šä¼ 和下载大å°çš„接å£ã€‚ * osscmdå¢žåŠ äº†--debug=trueæ¥æ‰“å°æ—¥å¿—。 * oss_api.pyä¸å¢žåŠ äº†ä¸Šä¼ å¤±è´¥æ—¶å€™çš„é‡è¯•ï¼Œæœ€å¤§é‡è¯•100次。 0.3.1 - 2013-08-02 * 支æŒè·³è½¬ã€‚ * ç»™oss_api.pyéƒ¨åˆ†å‡½æ•°å¢žåŠ è¯´æ˜Žã€‚ 0.1.3 - 2013-07-12 * 支æŒmultipart相关æ“作,osscmdå¢žåŠ multipart相关的接å£ã€‚ osscmd支æŒæœ¬åœ°ç›®å½•ä¸Šä¼ 。 osscmd支æŒå°†bucketçš„æŸä¸€ä¸ªprefixçš„object下载到本地的目录。 0.1.0 - 2011-11-15 * 第一次æ“作支æŒåŸºæœ¬çš„åˆ›å»ºï¼Œåˆ é™¤å’Œæ˜¾ç¤ºbucket。 支æŒåˆ›å»ºï¼Œåˆ 除和显示object。