|
# -*- coding: utf-8 -*-
import pngquant
import qiniu
from django.conf import settings
QINIU = settings.QINIU
auth = qiniu.Auth(QINIU['access_key'], QINIU['secret_key'])
pngquant.config(settings.PNG_QUANT_FILE)
def upload(data, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default'], compress=True):
if not data:
return ''
if compress:
try:
data = pngquant.quant_data(data, ndeep=3)[1]
except Exception as e:
pass
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):
# 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)
def upload_file_req(file, key=None, mime_type='application/octet-stream', bucket=QINIU['bucket_default'], compress=True):
# 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)
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)
|