這篇文章主要講解了“基于boto的s3cmd versioning功能怎么使用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“基于boto的s3cmd versioning功能怎么使用”吧!
10年積累的做網(wǎng)站、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有甘南免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
1. 開(kāi)啟versioning特性是針對(duì)整個(gè)bucket的,不能針對(duì)單獨(dú)的object啟停該特性。
2. 開(kāi)啟versioning以后,所有的操作都要基于object對(duì)應(yīng)的version-id進(jìn)行操作。
3. object的ACL權(quán)限設(shè)置取決于最新的object版本
4. 開(kāi)啟versioning以后,如果需要?jiǎng)h除object,應(yīng)該先刪除對(duì)應(yīng)object的所有version,之后再刪除object。
5. 開(kāi)啟versioning以后,object的每個(gè)version都會(huì)占用一個(gè)獨(dú)立的object空間,所以合理規(guī)劃避免空間的浪費(fèi)。
6. 測(cè)試jewel(ceph 10.2.6)的AWS2和AWS4都可以使用該特性,暫未發(fā)現(xiàn)有bug。
# -*- coding: utf-8 -*- from boto.s3.connection import S3Connection import boto import os import requests os.environ['S3_USE_SIGV4'] = 'True' endpoint = 's3.ceph.work' bucket_name = 'version-test4' access_key = '' secret_key = '' key_name = 'version_object2' conn = boto.connect_s3( aws_access_key_id=access_key, aws_secret_access_key=secret_key, host=endpoint, is_secure=False, calling_format=boto.s3.connection.SubdomainCallingFormat(), validate_certs=True, ) content_info = 'content_' #新建bucket并啟用versioning特性 bucket = conn.create_bucket(bucket_name) print "get versioning status={}".format(bucket.get_versioning_status()) bucket.configure_versioning(True) print "afert set versioning=enable,get versioning status={}".format(bucket.get_versioning_status()) #新建一個(gè)obj的5個(gè)不同版本 for i in range(5): content_ = "{}{}".format(content_info,i) key_ = bucket.new_key(key_name) key_.set_metadata('metadata',i) key_.set_contents_from_string(content_) #獲取obj的versioning列表及相關(guān)屬性 bucket = conn.get_bucket(bucket_name) version_list_ = [] for i in bucket.list_versions(prefix=key_name): key_ = bucket.get_key(key_name,version_id=i.version_id) print "content={} version_id={} etag={} acl={} metadata={}".format(key_.get_contents_as_string(version_id=i.version_id),i.version_id,i.etag,bucket.get_acl(key_name,version_id=i.version_id),key_.get_metadata('metadata')) version_list_.append(i.version_id) #帶verioning的obj的ACL設(shè)置 key_ = bucket.get_key(key_name) print "get key acl={}".format(key_.get_acl()) key_.set_acl('public-read') print "after set key acl=public-read,get key acl={}".format(key_.get_acl()) url_ = "http://{}.{}/{}".format(bucket_name,endpoint,key_name) resp = requests.get(url_) #下載會(huì)失敗 if resp.status_code == 200: print "before set acl=public-read -> download successful!" else: print "before set acl=public-read -> download failed" #設(shè)置最新的version-id對(duì)應(yīng)的obj的ACL bucket.set_acl('public-read', key_name, version_id=version_list_[0]) resp = requests.get(url_) #成功下載 if resp.status_code == 200: print "after set acl=public-read ->download successful!" else: print "after set acl=public-read -> download failed" #當(dāng)前obj的ACL就是最新version-id的ACL key_ = bucket.get_key(key_name) print "get key acl = {}".format(key_.get_acl()) key_ = bucket.get_key(key_name,version_id=version_list_[0]) print "get key version_id={} acl= {}".format(version_list_[0],key_.get_acl()) #生成當(dāng)前obj的URL key_ = bucket.get_key(key_name) print "generate_url={}".format(key_.generate_url(300)) #version 回滾操作,獲取當(dāng)前object信息 key_ = bucket.get_key(key_name) print "before roll back, content={} metadata={}".format(key_.get_contents_as_string(),key_.get_metadata('metadata')) #回滾到指定version_id,并獲取當(dāng)前對(duì)應(yīng)版本的object信息 key_ = bucket.get_key(key_name,version_id=version_list_[-1]) metadata_ = {'metadata': key_.get_metadata('metadata')} print "roll back to version_id={} content_={} metadata={}".format(version_list_[-1],key_.get_contents_as_string(version_id=version_list_[-1]),key_.get_metadata('metadata')) bucket.copy_key(key_name, bucket_name, key_name ,metadata=metadata_, src_version_id=version_list_[-1]) #回滾完成,檢查當(dāng)前object信息 key_ = bucket.get_key(key_name) print "after roll back, content={} metadata={}".format(key_.get_contents_as_string(),key_.get_metadata('metadata')) #刪除key key_ = bucket.get_key(key_name) key_.delete() bucket = conn.get_bucket(bucket_name) #obj對(duì)應(yīng)的 versioning 依然存在 for i in bucket.list_versions(prefix=key_name): key_ = bucket.get_key(key_name) print "key {} was deleted,but version_id={} remain".format(i.name,i.version_id) #就算關(guān)閉versioning, obj對(duì)應(yīng)的 versioning 依然存在 bucket.configure_versioning(False) for i in bucket.list_versions(prefix=key_name): key_ = bucket.get_key(key_name) print "get key={} version_id={}".format(i.name,i.version_id) #批量刪除versioning for i in bucket.list_versions(prefix=key_name): bucket.delete_key(key_name,version_id=i.version_id) print "deleted versioning -> {}".format(i.version_id) # print i.name,i.version_id #徹底清除 for i in bucket.list_versions(prefix=key_name): key_ = bucket.get_key(key_name) print i.name,i.version_id
感謝各位的閱讀,以上就是“基于boto的s3cmd versioning功能怎么使用”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)基于boto的s3cmd versioning功能怎么使用這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
新聞名稱(chēng):基于boto的s3cmdversioning功能怎么使用
本文URL:http://www.rwnh.cn/article40/pgcdho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站排名、靜態(tài)網(wǎng)站、、網(wǎng)頁(yè)設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)