api: Fix qr-std-upload

This commit is contained in:
Fam Zheng 2025-05-15 19:55:11 +01:00
parent 6de097b38e
commit 412485b45b
3 changed files with 19 additions and 21 deletions

View File

@ -162,13 +162,14 @@ if ENV == "prod":
ARCHIVE_BUCKET = "emblem-archive-prod" ARCHIVE_BUCKET = "emblem-archive-prod"
FRAMES_BUCKET = "emblem-frames-prod" FRAMES_BUCKET = "emblem-frames-prod"
OSS_QRS_BUCKET = "emblem-qrs" OSS_QRS_BUCKET = "emblem-qrs"
OSS_QRS_ENDPOINT = "https://oss-cn-guangzhou.aliyuncs.com"
else: else:
OSS = aliyun_dev_key OSS = aliyun_dev_key
FEATURES_BUCKET = "emblem-features-dev-1" FEATURES_BUCKET = "emblem-features-dev-1"
ARCHIVE_BUCKET = "emblem-oss-archive-dev-1" ARCHIVE_BUCKET = "emblem-oss-archive-dev-1"
FRAMES_BUCKET = "emblem-frames-dev" FRAMES_BUCKET = "emblem-frames-dev"
OSS_QRS_BUCKET = ARCHIVE_BUCKET OSS_QRS_BUCKET = ARCHIVE_BUCKET
OSS_QRS_ENDPOINT = None
IPINFO_TOKEN = '537dea9ec5c99a' IPINFO_TOKEN = '537dea9ec5c99a'

View File

@ -1,46 +1,43 @@
import json
import oss2 import oss2
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
from django.conf import settings from django.conf import settings
def oss_bucket(bucketname): def oss_bucket(bucket, endpoint=None):
oss = settings.OSS oss = settings.OSS
auth = oss2.Auth(oss['access_key'], oss['secret']) auth = oss2.Auth(oss['access_key'], oss['secret'])
bname = bucketname or oss['bucket'] bname = bucket or oss['bucket']
bucket = oss2.Bucket(auth, oss['endpoint'], bname) bucket = oss2.Bucket(auth, endpoint or oss['endpoint'], bname)
return bucket return bucket
def oss_put(name, f, bucket=None): def oss_put(name, f, bucket=None, endpoint=None):
oss_bucket(bucket).put_object(name, f) oss_bucket(bucket, endpoint).put_object(name, f)
def oss_get(name, bucket=None): def oss_get(name, bucket=None, endpoint=None):
try: try:
return oss_bucket(bucket).get_object(name).read() return oss_bucket(bucket, endpoint).get_object(name).read()
except oss2.exceptions.NoSuchKey: except oss2.exceptions.NoSuchKey:
return None return None
def oss_list(bucket): def oss_list(bucket=None, endpoint=None):
ret = [] ret = []
for obj in oss_bucket(bucket).list_objects().object_list: for obj in oss_bucket(bucket).list_objects().object_list:
ret.append(obj.key) ret.append(obj.key)
return ret return ret
def oss_delete(name, bucket): def oss_delete(name, bucket=None, endpoint=None):
oss_bucket(bucket).delete_object(name) oss_bucket(bucket, endpoint).delete_object(name)
def oss_sign_url(name, method='GET', bucket=None): def oss_sign_url(name, method='GET', bucket=None, endpoint=None):
return oss_bucket(bucket).sign_url(method, name.encode(), 24 * 60 * 60) 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: try:
obj = oss_bucket(bucket).get_object(name) obj = oss_bucket(bucket, endpoint).get_object(name)
return True return True
except oss2.exceptions.NoSuchKey: except oss2.exceptions.NoSuchKey:
return False return False
def oss_stat(bucket=None): def oss_stat(bucket=None, endpoint=None):
bucket = oss_bucket(bucket) bucket = oss_bucket(bucket, endpoint)
stat = bucket.get_bucket_stat() stat = bucket.get_bucket_stat()
return { return {
'objects': stat.object_count, 'objects': stat.object_count,

View File

@ -1636,7 +1636,7 @@ class QrStdUploadView(BaseView):
raise Exception("invalid file name") raise Exception("invalid file name")
pref = name[:2] pref = name[:2]
key = f"v5/{pref}/{fname}" 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): class EstorArchive(BaseView):
name = 'estor-archive' name = 'estor-archive'