diff --git a/api/emblemapi/settings.py b/api/emblemapi/settings.py index 77f29a8..126336b 100644 --- a/api/emblemapi/settings.py +++ b/api/emblemapi/settings.py @@ -162,13 +162,14 @@ if ENV == "prod": ARCHIVE_BUCKET = "emblem-archive-prod" FRAMES_BUCKET = "emblem-frames-prod" OSS_QRS_BUCKET = "emblem-qrs" + OSS_QRS_ENDPOINT = "https://oss-cn-guangzhou.aliyuncs.com" else: OSS = aliyun_dev_key FEATURES_BUCKET = "emblem-features-dev-1" ARCHIVE_BUCKET = "emblem-oss-archive-dev-1" FRAMES_BUCKET = "emblem-frames-dev" OSS_QRS_BUCKET = ARCHIVE_BUCKET - + OSS_QRS_ENDPOINT = None IPINFO_TOKEN = '537dea9ec5c99a' diff --git a/api/products/aliyun.py b/api/products/aliyun.py index 0cafe04..61fe652 100644 --- a/api/products/aliyun.py +++ b/api/products/aliyun.py @@ -1,46 +1,43 @@ -import json import oss2 -from aliyunsdkcore.client import AcsClient -from aliyunsdkcore.request import CommonRequest from django.conf import settings -def oss_bucket(bucketname): +def oss_bucket(bucket, endpoint=None): oss = settings.OSS auth = oss2.Auth(oss['access_key'], oss['secret']) - bname = bucketname or oss['bucket'] - bucket = oss2.Bucket(auth, oss['endpoint'], bname) + bname = bucket or oss['bucket'] + bucket = oss2.Bucket(auth, endpoint or oss['endpoint'], bname) return bucket -def oss_put(name, f, bucket=None): - oss_bucket(bucket).put_object(name, f) +def oss_put(name, f, bucket=None, endpoint=None): + oss_bucket(bucket, endpoint).put_object(name, f) -def oss_get(name, bucket=None): +def oss_get(name, bucket=None, endpoint=None): try: - return oss_bucket(bucket).get_object(name).read() + return oss_bucket(bucket, endpoint).get_object(name).read() except oss2.exceptions.NoSuchKey: return None -def oss_list(bucket): +def oss_list(bucket=None, endpoint=None): ret = [] for obj in oss_bucket(bucket).list_objects().object_list: ret.append(obj.key) return ret -def oss_delete(name, bucket): - oss_bucket(bucket).delete_object(name) +def oss_delete(name, bucket=None, endpoint=None): + oss_bucket(bucket, endpoint).delete_object(name) -def oss_sign_url(name, method='GET', bucket=None): - return oss_bucket(bucket).sign_url(method, name.encode(), 24 * 60 * 60) +def oss_sign_url(name, method='GET', bucket=None, endpoint=None): + return oss_bucket(bucket, endpoint).sign_url(method, name.encode(), 24 * 60 * 60) -def oss_has(name, bucket=None): +def oss_has(name, bucket=None, endpoint=None): try: - obj = oss_bucket(bucket).get_object(name) + obj = oss_bucket(bucket, endpoint).get_object(name) return True except oss2.exceptions.NoSuchKey: return False -def oss_stat(bucket=None): - bucket = oss_bucket(bucket) +def oss_stat(bucket=None, endpoint=None): + bucket = oss_bucket(bucket, endpoint) stat = bucket.get_bucket_stat() return { 'objects': stat.object_count, diff --git a/api/products/views.py b/api/products/views.py index a21cb69..f86236d 100644 --- a/api/products/views.py +++ b/api/products/views.py @@ -1636,7 +1636,7 @@ class QrStdUploadView(BaseView): raise Exception("invalid file name") pref = name[:2] key = f"v5/{pref}/{fname}" - r = oss_put(key, body, bucket=settings.OSS_QRS_BUCKET) + r = oss_put(key, body, bucket=settings.OSS_QRS_BUCKET, endpoint=settings.OSS_QRS_ENDPOINT) class EstorArchive(BaseView): name = 'estor-archive'