python 上传文件夹内图片到七牛,同时加入批量删除,单个删除
先注册好七牛的账户,那都AK和SK两个key
然后把key写入到环境变量或者写到下面的python文件里面
然后运行:
python main.py --path='C:\Photo' --category='person'
运行后会上传到七牛的虚拟目录 person目录下
如果要删除,bulk_delete批量删除某个前缀或者文件夹的
然后把key写入到环境变量或者写到下面的python文件里面
from qiniu import Auth, put_file,BucketManager,build_batch_delete
import os
import fire
access_key = os.getenv('qiniu_access_key')
secret_key = os.getenv('qiniu_secret_key')
bucket_name = '' # 你的空间名称
HOST ='[url]http://xximg.xxx.com/{}'[/url] # 可以不用填
TEMPLATE = '\n![{}]({})\n\n\n'
def upload(file,category=''):
#构建鉴权对象
q = Auth(access_key, secret_key)
#要上传的空间
#上传后保存的文件名
key = category +'/' + os.path.split(file)[1]
#生成上传 Token,可以指定过期时间等
token = q.upload_token(bucket_name, key) # 永不过期
#要上传文件的本地路径
ret, info = put_file(token, key, file, version='v1')
print(ret)
print(info)
return HOST.format(ret['key'])
def bulk_upload(path,category=''):
with open('qiniu_image.md','a+') as fp:
for file in os.listdir(path):
full_path = os.path.join(path,file)
if os.path.isfile(full_path):
host_url = upload(full_path,category)
fp.write(TEMPLATE.format(host_url,host_url))
def get_file_info(prefix,limit = 10):
q = Auth(access_key, secret_key)
bucket = BucketManager(q)
delimiter = None
marker = None
ret, eof, info = bucket.list(bucket_name, prefix, marker, limit, delimiter)
# assert len(ret.get('items')) is not None
url_list=[]
for item in ret.get('items',):
url_list.append(item['key'])
# print(url_list)
# print(len(url_list))
return url_list,len(url_list)
def bulk_delete(prefix,limit=None):
url_list,lens = get_file_info(prefix,limit=limit)
q = Auth(access_key, secret_key)
bucket = BucketManager(q)
ops = build_batch_delete(bucket_name, url_list)
ret, info = bucket.batch(ops)
print(info)
print(ret)
def delete_one(key):
q = Auth(access_key, secret_key)
#初始化BucketManager
bucket = BucketManager(q)
#你要测试的空间, 并且这个key在你空间中存在
# key = 'python-logo.png'
#删除bucket_name 中的文件 key
ret, info = bucket.delete(bucket_name, key)
print(info)
print(ret)
# assert ret == {}
def bulk_delete_ones(prefix):
url_list,lens = get_file_info(prefix,limit=10)
for url in url_list:
delete_one(url)
# print(url)
def main(path,category):
if os.path.isdir(path):
bulk_upload(path,category)
elif os.path.isfile(path):
upload(path,category)
else:
raise ValueError('文件不存在')
get_file_info()
bulk_delete('resource')
bulk_delete_ones('resource')
delete_one('resource/data_beauty.png')
if __name__ == '__main__':
fire.Fire(main)
然后运行:
python main.py --path='C:\Photo' --category='person'
运行后会上传到七牛的虚拟目录 person目录下
如果要删除,bulk_delete批量删除某个前缀或者文件夹的