人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

七牛云的python sdk 批量刪除資源的操作方法

發(fā)布日期:2021-12-25 00:59 | 文章來源:源碼之家

今天做項目的時候用到七牛云,關(guān)于對資源的操作是在后端做的,用的SDK,但是,在網(wǎng)上沒找到詳細的解析,官方文檔也沒有太詳細的解說,所以無奈只好看下源碼

這里做一下簡單的記錄

from qiniu import build_batch_delete, Auth, BucketManager
#需要填寫你的 Access Key 和 Secret Key,這個在你的個人中心里有
access_key = 'Access_Key'
secret_key = 'Secret_Key'
#構(gòu)建鑒權(quán)對象
q = Auth(access_key, secret_key)
#初始化BucketManager
bucket = BucketManager(q)
# 這里就是你的七牛云里的空間名稱
bucket_name = "test"# 例子, 文件名 數(shù)組
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 函數(shù)進去,進入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):# 這里給了個默認參數(shù) delete 刪除操作,
 return [_build_op(operation, entry(bucket, key)) for key in keys]

下面我們看看 entry 方法里做了什么

utils.py

def entry(bucket, key):
 """計算七牛API中的數(shù)據(jù)格式:
 entry規(guī)格參考 https://developer.qiniu.com/kodo/api/1276/data-format
 Args:
  bucket: 待操作的空間名
  key: 待操作的文件名
 Returns:
  符合七牛API規(guī)格的數(shù)據(jù)格式
 """
 if key is None:
  return urlsafe_base64_encode('{0}'.format(bucket))
 else:
  return urlsafe_base64_encode('{0}:{1}'.format(bucket, key))
如果key 不存在 數(shù)據(jù)就是空間名,key存在就做了個字符串格式化
例如:第一個key 是  test.mp4那么 數(shù)據(jù)就是 "test:test.mp4"
然后將  "test:test.mp4" 傳入  urlsafe_base64_encode我們再看看  urlsafe_base64_encode  做了什么
from base64 import urlsafe_b64encode
def urlsafe_base64_encode(data):
 """urlsafe的base64編碼:
 對提供的數(shù)據(jù)進行urlsafe的base64編碼。規(guī)格參考:
 https://developer.qiniu.com/kodo/manual/1231/appendix#1
 Args:
  data: 待編碼的數(shù)據(jù),一般為字符串
 Returns:
  編碼后的字符串
 """
 ret = urlsafe_b64encode(b(data))
 return s(ret)
返回的數(shù)據(jù)是 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 函數(shù) 返回的 是'ZGRkZDpkZGRfMzMubXA0' 類型數(shù)據(jù) 結(jié)合上文 我們再看看 _build_op 方法做了什么

bucket.py

def _build_op(*args):  這里 出入args 為("delete",'ZGRkZDpkZGRfMzMubXA0' )
 return '/'.join(args)# join  操作以后  為"delete/ZGRkZDpkZGRfMzMubXA0"

到這 build_batch_delete 方法就執(zhí)行完了 結(jié)合上面示例,該方法 返回的是一個列表 ["delete/ZGRkZDpkZGRfMzMubXA0","delete/ZGRkZDpkZGRfMzMubXA0","delete/ZGRkZDpkZGRfMzMubXA0","delete/ZGRkZDpkZGRfMzMubXA0"]

然后 再看 bucket.batch(ops) 里 做了 什么

 def batch(self, operations):
  """批量操作:
  在單次請求中進行多個資源管理操作,具體規(guī)格參考:
  http://developer.qiniu.com/docs/v6/api/reference/rs/batch.html
  Args:
operations: 資源管理操作數(shù)組,可通過
  Returns:
一個dict變量,返回結(jié)果類似:
 [
  { "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'  # 數(shù)據(jù)處理操作Host
UC_HOST = 'https://uc.qbox.me'  # 獲取空間信息Host
_BLOCK_SIZE = 1024 * 1024 * 4  # 斷點續(xù)傳分塊大小,該參數(shù)為接口規(guī)格,暫不支持修改
_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,  # 鏈接重試次數(shù)為3次
 'connection_pool': 10,  # 鏈接池個數(shù)為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']}

再然后就是 調(diào)post請求 將刪除請求 和 數(shù)據(jù)發(fā)過去

最后返回值 得提一下

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)

在這個文件里 還單獨處理了一下 響應(yīng)體 所以最后返回的是一個元祖,可以用兩個參數(shù)接受

以上就是對 七牛云 這個刪除 操作 做的一個源碼分析,,有不對的地方請大佬指出。

到此這篇關(guān)于python sdk 批量刪除資源的操作方法的文章就介紹到這了,更多相關(guān)python sdk 是如何 批量刪除資源的內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部