一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 七牛云的python sdk 批量刪除資源的操作方法

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

2022-01-25 00:22許光宗 Python

今天做項目的時候用到七牛云,關于對資源的操作是在后端做的,用的SDK,這篇文章主要介紹了七牛云的python sdk 是如何 批量刪除資源的,需要的朋友可以參考下

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

這里做一下簡單的記錄

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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

?
1
2
def build_batch_delete(bucket, keys):   # 這里的 bucket 就是上文的bucket_name 空間名稱,keys 及時文件列表
    return _one_key_batch('delete', bucket, keys)
?
1
2
def _one_key_batch(operation, bucket, keys):   # 這里給了個默認參數 delete 刪除操作,
    return [_build_op(operation, entry(bucket, key)) for key in keys]

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

utils.py

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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

?
1
2
3
4
5
6
7
8
9
10
11
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

?
1
2
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) 里 做了 什么

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

?
1
2
3
4
5
6
7
8
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 是如何 批量刪除資源的內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/xuguangzong/p/15412283.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 五月天导航 | 欧美精选视频 | 星星动漫无删减在线观看 | 91精品国产高清久久久久久91 | 亚洲国产成人久久精品影视 | 幻女free性zoz0交 | 免费看日产一区二区三区 | 午夜私人影院在线观看 | 高清在线一区二区 | 青青青国产成人久久111网站 | 欧美性videossex丝袜 | 男人女人插 | 国产欧美国产精品第一区 | 大伊香蕉精品视频一区 | 亚洲 欧美 国产 综合首页 | 免费国产一级观看完整版 | 亚洲图片综合区 | 日本美女视频韩国视频网站免费 | 4hu影院永久在线播放 | 九九热只有精品 | 3d欧美人禽交 | 99视频一区 | 97精品国产自在现线免费观看 | 精品一区二区三区免费毛片 | 天天干夜夜玩 | china外卖员gay帮口 | 国产福利你懂的 | 成人免费国产欧美日韩你懂的 | 性欧美sexovideotv | 日本网络视频www色高清免费 | 免费观看www视频 | 美女和男人免费网站视频 | 翁熄性放纵交换300章 | 亚洲国产综合另类视频 | 美女扒开粉嫩尿口漫画 | 日韩精品高清自在线 | 日本在线视频免费观看 | 亚洲haose在线观看 | 国产精品亚洲午夜不卡 | 韩国三级年轻小的胰子完整 | 91精品免费国产高清在线 |