七牛云的 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
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使用教程 - 上传策略详解
文 七牛云存储Python SDK使用教程 - 上传策略详解 七牛云存储 python-sdk 七牛云存储教程 jemygraw 2015年01月04日发布 推荐 1 推荐 收藏 2 收藏,2.7k ...
- Python小练习:批量删除多个文件夹内的相同文件
应用场景: 下载的多个文件夹是压缩包,解压后每个文件夹都有某个网站的推广链接,想要批量的删除该文件 使用环境:win7,python3.6 代码: 1.直接用for循环 由于os.walk()方法自带 ...
- 七牛云数据存储Demo
利用七牛云的Python SDK实现文件上传.下载等操作. import os import requests import qiniu from qiniu import BucketManager ...
- 基于七牛Python SDK写的一个同步脚本
需求背景 最近刚搭了个markdown静态博客,想把博客的图片放到云存储中. 经过调研觉得七牛可以满足我个人的需求,就选它了. 博客要引用图片就要先将图片上传到云上. 虽然七牛网站后台可以上传文件,但 ...
- 开发者选择短视频SDK,为何青睐七牛云?
从文字到图片再到视频的互联网内容媒介发展途径,随着 5g 技术的逐渐落地愈发清晰.短视频市场中的角力也随着诸多资本和创业者的涌入,进入到白热化阶段.这样的情况下,选择合适的短视频SDK产品就显得尤为重 ...
- php七牛批量删除空间内的所有文件方法
相信大家都在使用七牛的免费云存储服务的同时,有清空七牛云存储镜像文件或者批量删除七牛云空间文件的需求,该怎么做?官方的工具好像并没有提供批量删除的功能,七牛云官方给出的建议是删除空间,再新建一个这样太 ...
- 七牛云存储官方接口PHP版本
PHP SDKv6 此 SDK 适用于 PHP 5.1.0 及其以上版本.基于 七牛云存储官方API 构建.使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上. ...
- 如何利用”七牛云”在UEditor实现图片的上传和浏览
在学习之前,我参考了朋友些的一篇关于这个功能实现的文章,非常不错.大家可以参考:http://www.cnblogs.com/John-Marnoon/p/5818528.html#3501846 里 ...
- 架构师小跟班:教你从零开始申请和配置七牛云免费OSS对象存储(不能再详细了)
背景 之前为了练习Linux系统使用,在阿里云上低价买了一台服务器(网站首页有活动链接,传送门),心里想反正闲着也是闲着,就放了一个网站上去.现在随着数据越来越多,服务器空间越来越吃紧,我就考虑使用七 ...
随机推荐
- java8时间类API安全问题(赠送新的时间工具类哟)
LocalDateTime等新出的日期类全是final修饰的类,不能被继承,且对应的日期变量都是final修饰的,也就是不可变类.赋值一次后就不可变,不存在多线程数据问题. simpleDateFor ...
- ES6扩展——箭头函数
1.箭头函数 在es6中,单一参数的单行箭头函数语法结构可以总结如下: const 函数名 = 传入的参数 => 函数返回的内容,因此针对于 const pop = arr => arr. ...
- T-SQL - query01_创建数据库|创建表|添加数据|简单查询
时间:2017-09-29 整理:byzqy 本篇以"梁山好汉花名册"为例,记录MS SQLServer T-SQL语句的使用,包含命令: 创建数据库 | 删除数据库 创建表 | ...
- Clean Architecture For RazorPage 实现多语言和本地化
最近终于把多语言功能加上了,这次就再发一篇,讲一下在asp.net core环境下如何实现多语言和本地化(Globalization and localization)功能,主要参看:ASP.NET ...
- Appium问题解决方案(2)- AttributeError:module 'appium.webdriver' has no attribute 'Remote'
背景 运行脚本的时候,就直接报这个错误了,然后去看了下 appium.webdriver 库 结果发现啥都没有,就知道有问题了,然后一步步排查 步骤一 检查Appium-Python-Client 和 ...
- AI:用软件逻辑做硬件爆款
"我们的野心不止那么一点点." 百度集团副总裁.百度智能生活事业群组(SLG)总经理.小度CEO景鲲曾多次对外表达过这样的观点. 在2021年百度世界大会上,小度又一口气发布了四款 ...
- Fastjson 1.2.22-24 反序列化漏洞分析(1)
Fastjson 1.2.22-24 反序列化漏洞分析(1) 前言 FastJson是alibaba的一款开源JSON解析库,可用于将Java对象转换为其JSON表示形式,也可以用于将JSON字符串转 ...
- 【第三篇】- Git 工作流程之Spring Cloud直播商城 b2b2c电子商务技术总结
Git 工作流程 本章节我们将为大家介绍 Git 的工作流程. 一般工作流程如下: 克隆 Git 资源作为工作目录. 在克隆的资源上添加或修改文件. 如果其他人修改了,你可以更新资源. 在提交前查看修 ...
- 用python的pandas读取excel文件中的数据
一.读取Excel文件 使用pandas的read_excel()方法,可通过文件路径直接读取.注意到,在一个excel文件中有多个sheet,因此,对excel文件的读取实际上是读取指定文件.并 ...
- Markdown快捷键详解(源自狂神说Java视频,整理版)
#加空格 表示是一个标题(一级标题)回车后直接生成 例下 Markdown学习 标题: ##(两个#号)空格加标题名字即为二级标题例下 二级标题 三个#号 加标题名字即为三级标题,与二级标题等有层级关 ...