七牛雲的python sdk 批量刪除資源的操作方法
今天做項目的時候用到七牛雲,關於對資源的操作是在後端做的,用的SDK,但是,在網上沒找到詳細的解析,官方文檔也沒有太詳細的解說,所以無奈隻好看下源碼
這裡做一下簡單的記錄
from qiniu import build_batch_delete, Auth, BucketManager #需要填寫你的 Access Key 和 Secret Key,這個在你的個人中心裡有 access_key = 'Access_Key' secret_key = 'Secret_Key' #構建鑒權對象 q = Auth(access_key, secret_key) #初始化BucketManager bucket = BucketManager(q) # 這裡就是你的七牛雲裡的空間名稱 bucket_name = "test"# 例子, 文件名 數組 keys = ['test.mp4','test1.mp4', ''test2.mp4'', ''test3.mp4''] ops = build_batch_delete(bucket_name, keys) ret, info = bucket.batch(ops) print(info) 以上就是批量刪除的全部代碼,下面做一下詳細的解說
從build_batch_delete 函數進去,進入bucket.py文件下的 build_batch_delete 方法裡
bucket.py
def build_batch_delete(bucket, keys): # 這裡的 bucket 就是上文的bucket_name 空間名稱,keys 及時文件列表 return _one_key_batch('delete', bucket, keys)
def _one_key_batch(operation, bucket, keys): # 這裡給瞭個默認參數 delete 刪除操作, return [_build_op(operation, entry(bucket, key)) for key in keys]
下面我們看看 entry 方法裡做瞭什麼
utils.py
def entry(bucket, key): """計算七牛API中的數據格式: entry規格參考 https://developer.qiniu.com/kodo/api/1276/data-format Args: bucket: 待操作的空間名 key: 待操作的文件名 Returns: 符合七牛API規格的數據格式 """ if key is None: return urlsafe_base64_encode('{0}'.format(bucket)) else: return urlsafe_base64_encode('{0}:{1}'.format(bucket, key)) 如果key 不存在 數據就是空間名,key存在就做瞭個字符串格式化 例如:第一個key 是 test.mp4 那麼 數據就是 "test:test.mp4" 然後將 "test:test.mp4" 傳入 urlsafe_base64_encode 我們再看看 urlsafe_base64_encode 做瞭什麼 from base64 import urlsafe_b64encode def urlsafe_base64_encode(data): """urlsafe的base64編碼: 對提供的數據進行urlsafe的base64編碼。規格參考: https://developer.qiniu.com/kodo/manual/1231/appendix#1 Args: data: 待編碼的數據,一般為字符串 Returns: 編碼後的字符串 """ ret = urlsafe_b64encode(b(data)) return s(ret) 返回的數據是 bytes 類型 又傳到s方法裡做瞭一遍解碼 為字符串類型
compat.py
def b(data): if isinstance(data, str): return data.encode('utf-8') return data 最後data 被傳入 b方法 做瞭一下utf-8 編碼 def s(data): if isinstance(data, bytes): data = data.decode('utf-8') return data
最後 entry 函數 返回的 是’ZGRkZDpkZGRfMzMubXA0′ 類型數據 結合上文 我們再看看 _build_op 方法做瞭什麼
bucket.py
def _build_op(*args): 這裡 出入args 為("delete",'ZGRkZDpkZGRfMzMubXA0' ) return '/'.join(args) # join 操作以後 為 "delete/ZGRkZDpkZGRfMzMubXA0"
到這 build_batch_delete 方法就執行完瞭 結合上面示例,該方法 返回的是一個列表 [“delete/ZGRkZDpkZGRfMzMubXA0″,”delete/ZGRkZDpkZGRfMzMubXA0″,”delete/ZGRkZDpkZGRfMzMubXA0″,”delete/ZGRkZDpkZGRfMzMubXA0”]
然後 再看 bucket.batch(ops) 裡 做瞭 什麼
def batch(self, operations): """批量操作: 在單次請求中進行多個資源管理操作,具體規格參考: http://developer.qiniu.com/docs/v6/api/reference/rs/batch.html Args: operations: 資源管理操作數組,可通過 Returns: 一個dict變量,返回結果類似: [ { "code": <HttpCode int>, "data": <Data> }, { "code": <HttpCode int> }, { "code": <HttpCode int> }, { "code": <HttpCode int> }, { "code": <HttpCode int>, "data": { "error": "<ErrorMessage string>" } }, ... ] 一個ResponseInfo對象 """ url = '{0}/batch'.format(config.get_default('default_rs_host')) return self.__post(url, dict(op=operations))
config.py
RS_HOST = 'http://rs.qiniu.com' # 管理操作Host RSF_HOST = 'http://rsf.qbox.me' # 列舉操作Host API_HOST = 'http://api.qiniu.com' # 數據處理操作Host UC_HOST = 'https://uc.qbox.me' # 獲取空間信息Host _BLOCK_SIZE = 1024 * 1024 * 4 # 斷點續傳分塊大小,該參數為接口規格,暫不支持修改 _config = { 'default_zone': zone.Zone(), 'default_rs_host': RS_HOST, 'default_rsf_host': RSF_HOST, 'default_api_host': API_HOST, 'default_uc_host': UC_HOST, 'connection_timeout': 30, # 鏈接超時為時間為30s 'connection_retries': 3, # 鏈接重試次數為3次 'connection_pool': 10, # 鏈接池個數為10 'default_upload_threshold': 2 * _BLOCK_SIZE # put_file上傳方式的臨界默認值 }
從 配置文件裡 取出跟路徑 做拼接
得 URL =http://rs.qiniu.com/batch
dict(op=operations) 得 {‘op’: [‘delete/ZGRkZDpkZGRfMzMubXA0’, ‘delete/ZGRkZDpkZGRfMzMubXA0’, ‘delete/ZGRkZDpkZGRfMzMubXA0’, ‘delete/ZGRkZDpkZGRfMzMubXA0’]}
再然後就是 調post請求 將刪除請求 和 數據發過去
最後返回值 得提一下
http.py
def __return_wrapper(resp): if resp.status_code != 200 or resp.headers.get('X-Reqid') is None: return None, ResponseInfo(resp) resp.encoding = 'utf-8' ret = resp.json() if resp.text != '' else {} if ret is None: # json null ret = {} return ret, ResponseInfo(resp)
在這個文件裡 還單獨處理瞭一下 響應體 所以最後返回的是一個元祖,可以用兩個參數接受
以上就是對 七牛雲 這個刪除 操作 做的一個源碼分析,,有不對的地方請大佬指出。
到此這篇關於python sdk 批量刪除資源的操作方法的文章就介紹到這瞭,更多相關python sdk 是如何 批量刪除資源的內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python 常見加密操作的實現
- C++中 ‘=default ’及‘ =delete ’的使用
- 三種Java自定義DNS解析器方法與實踐
- 雲原生Docker容器自定義DNS解析
- python argparse的使用步驟(全網最全)