大蟒蛇python教程共享七牛云的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):          """批量操作:            在单次请求中进行多个资源管理操作,具体规格参考:          https://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 = 'https://rs.qiniu.com'  # 管理操作host  rsf_host = 'https://rsf.qbox.me'  # 列举操作host  api_host = 'https://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 =https://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 是如何 批量删除资源的内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!

需要了解更多python教程分享七牛云的python sdk 批量删除资源的操作方法,都可以关注python教程分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/pythontutorial/841389.html

(0)
上一篇 2021年10月16日
下一篇 2021年10月16日

精彩推荐