from qiniu import Auth, put_file
from urllib import quote
from scripy.config.config import qiniu_conf
class QiniuCloud(object):
url = 'xxxxxx'
def __init__(self, access_key, secret_key, bucket, url=None):
"""
:param access_key:
:param secret_key:
"""
self.access_key = access_key
self.secret_key = secret_key
self.bucket = bucket
if url:
self.url = url
self.client = Auth(self.access_key, self.secret_key)
def get_download_url(self, target_id):
"""
获取七牛下载链接
:param target_id:
:return:
"""
# 处理七牛特殊字符问题
target_id = quote(target_id.encode('utf-8'))
base_url = 'http://%s/%s' % (self.url, target_id)
base_url = base_url.encode("utf-8")
url = self.client.private_download_url(base_url, expires=3600)
return unicode(url, 'utf-8')
def upload_data(self, dir_path, **kwargs):
"""
上传文件
:param dir_path:
:param kwargs:
:return:
"""
file_name = dir_path.split("/")[-1]
token = self.set_upload_token(key=file_name)
ret, info = put_file(token, key=file_name, file_path=dir_path)
if info.status_code != 200:
logging.error(info.text_body)
raise OSError
download_url = self.get_download_url(file_name)
if kwargs.get("is_delete"):
os.remove(dir_path)
return {
"ok": True,
"file_key": file_name,
"url": download_url
}
def set_upload_token(self, **kwargs):
"""
获取上传文件token
:param kwargs:
:return:
"""
if kwargs.get('bucket'):
self.bucket = kwargs.get('bucket')
key = str(ObjectId())
if kwargs.get("key"):
key = kwargs.get("key")
return self.client.upload_token(self.bucket, key)
@classmethod
def default_config(cls, qiniu_config=None):
"""
默认配置
:return:
"""
if not qiniu_config:
qiniu_config = qiniu_conf
return cls(access_key=qiniu_config['access_key'],
secret_key=qiniu_config['secret_key'],
bucket=qiniu_config['bucket'],
url=qiniu_config['url'])
补充:根据图片url 下载图片方法
from urllib import urlretrieve
urlretrieve(img_url, download_path + "{}.jpg".format(img_name))