暫無描述

qiniucdn.py 2.7KB

    # -*- coding: utf-8 -*- import re import pngquant import qiniu from django.conf import settings from django_file_md5 import calculate_data_md5 from utils.thumbnail_utils import make_thumbnail2 QINIU = settings.QINIU auth = qiniu.Auth(QINIU['access_key'], QINIU['secret_key']) pngquant.config(settings.PNG_QUANT_FILE) def generate_new_key(key, data): # key = re.sub(r"(.+/)(.+)\.(.+)", lambda m: '{}{}.{}'.format(m.group(1), calculate_data_md5(data), m.group(3)), key) sections = re.split(r'/|\.', key) base_path, ext = '/'.join(sections[:-2]), sections[-1] return '{}{}{}.{}'.format(base_path, base_path and '/', calculate_data_md5(data), ext) def upload(data, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default'], compress=True, thumbnail=True, thumbnailw=1080, thumbnailh=720): if not data: return '' if thumbnail: w, h = thumbnailw or 1080, thumbnailh or 720 data = make_thumbnail2(data, w=w, h=h) if compress: try: data = pngquant.quant_data(data, ndeep=3)[1] except Exception as e: pass if (thumbnail or compress) and key: key = generate_new_key(key, data) token = auth.upload_token(bucket, key=key) ret, _ = qiniu.put_data(token, key, data, mime_type=mime_type) return ret.get('key') def upload_file_admin(obj, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default'], compress=True, thumbnail=True, thumbnailw=1080, thumbnailh=720): # Django Admin Upload if not obj.image: return '' obj.image.seek(0) return upload(obj.image.read(), key=key or obj.image.name, mime_type=mime_type, bucket=bucket, compress=compress, thumbnail=thumbnail, thumbnailw=thumbnailw, thumbnailh=thumbnailh) def upload_file_req(file, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default'], compress=True, thumbnail=True, thumbnailw=1080, thumbnailh=720): # photo = request.FILES.get('photo', '') # <InMemoryUploadedFile: photo.png (image/png)> if not file: return '' file.seek(0) return upload(file.read(), key=key or file.name, mime_type=mime_type, bucket=bucket, compress=compress, thumbnail=thumbnail, thumbnailw=thumbnailw, thumbnailh=thumbnailh) def upload_file_path(path, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default'], compress=True): if not path: return '' token = auth.upload_token(bucket, key=key) ret, _ = qiniu.put_file(token, key, path, mime_type=mime_type) return ret.get('key') def qiniu_file_url(key, bucket=QINIU['bucket_default']): if not key: return '' return '{}/{}'.format(QINIU['buckets'][bucket] if settings.QINIU_FILE_URL_HTTPS else settings.QINIU_FILE_URL_AFTER, key)