|
@@ -15,17 +15,19 @@ import time
|
|
|
|
|
|
import boto3
|
|
import boto3
|
|
import botocore
|
|
import botocore
|
|
|
|
+import oss2
|
|
import requests
|
|
import requests
|
|
|
|
+from obs import ObsClient
|
|
|
|
|
|
from AnsjerPush.Config.aiConfig import DEVICE_EVENT_TYPE, ALGORITHM_COMBO_TYPES
|
|
from AnsjerPush.Config.aiConfig import DEVICE_EVENT_TYPE, ALGORITHM_COMBO_TYPES
|
|
from AnsjerPush.config import CONFIG_INFO, CONFIG_CN, MULTI_CHANNEL_TYPE_LIST, SYS_EVENT_TYPE_LIST, AWS_ACCESS_KEY_ID, \
|
|
from AnsjerPush.config import CONFIG_INFO, CONFIG_CN, MULTI_CHANNEL_TYPE_LIST, SYS_EVENT_TYPE_LIST, AWS_ACCESS_KEY_ID, \
|
|
- AWS_SECRET_ACCESS_KEY, EVENT_DICT, EVENT_DICT_CN, CONFIG_TEST
|
|
|
|
|
|
+ AWS_SECRET_ACCESS_KEY, EVENT_DICT, EVENT_DICT_CN, CONFIG_TEST, HUAWEICLOUD_AK, HUAWEICLOUD_SK, \
|
|
|
|
+ HUAWEICLOUD_OBS_SERVER, HUAWEICLOUD_PUSH_BUKET, OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
|
|
from AnsjerPush.config import XMPUSH_CONFIG, OPPOPUSH_CONFIG, XM_PUSH_CHANNEL_ID
|
|
from AnsjerPush.config import XMPUSH_CONFIG, OPPOPUSH_CONFIG, XM_PUSH_CHANNEL_ID
|
|
from Model.models import UidPushModel, SysMsgModel, DeviceSharePermission, DeviceChannelUserSet, \
|
|
from Model.models import UidPushModel, SysMsgModel, DeviceSharePermission, DeviceChannelUserSet, \
|
|
DeviceChannelUserPermission, UidSetModel, Device_Info, UserAudioVideoPush, PushLog
|
|
DeviceChannelUserPermission, UidSetModel, Device_Info, UserAudioVideoPush, PushLog
|
|
from Object.ETkObject import ETkObject
|
|
from Object.ETkObject import ETkObject
|
|
from Object.OCIObjectStorage import OCIObjectStorage
|
|
from Object.OCIObjectStorage import OCIObjectStorage
|
|
-from Object.RedisObject import RedisObject
|
|
|
|
from Object.UidTokenObject import UidTokenObject
|
|
from Object.UidTokenObject import UidTokenObject
|
|
from Object.utils import LocalDateTimeUtil
|
|
from Object.utils import LocalDateTimeUtil
|
|
from Service.CommonService import CommonService
|
|
from Service.CommonService import CommonService
|
|
@@ -33,7 +35,7 @@ from Service.EquipmentInfoService import EquipmentInfoService, EQUIPMENT_INFO_DI
|
|
from Service.HuaweiPushService.HuaweiPushService import HuaweiPushObject
|
|
from Service.HuaweiPushService.HuaweiPushService import HuaweiPushObject
|
|
from Service.PushService import PushObject
|
|
from Service.PushService import PushObject
|
|
from django.db import close_old_connections
|
|
from django.db import close_old_connections
|
|
-from Object.GlobalThreadPoolObject import GlobalThreadPool
|
|
|
|
|
|
+
|
|
|
|
|
|
LOGGING = logging.getLogger('info')
|
|
LOGGING = logging.getLogger('info')
|
|
TIME_LOGGER = logging.getLogger('time')
|
|
TIME_LOGGER = logging.getLogger('time')
|
|
@@ -733,8 +735,15 @@ class DevicePushService:
|
|
异步推送图片
|
|
异步推送图片
|
|
"""
|
|
"""
|
|
try:
|
|
try:
|
|
- if storage_reg in [3, 4]:
|
|
|
|
|
|
+ if storage_reg == 1:
|
|
|
|
+ # 阿里云
|
|
|
|
+ auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
|
|
|
|
+ oss_img_bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'apg')
|
|
|
|
+ image_url = oss_img_bucket.sign_url('GET', key, 300)
|
|
|
|
+ elif storage_reg in [3, 4]:
|
|
image_url = DevicePushService.oci_object_url(uid, redis_obj, storage_reg, bucket, key)
|
|
image_url = DevicePushService.oci_object_url(uid, redis_obj, storage_reg, bucket, key)
|
|
|
|
+ elif storage_reg == 5:
|
|
|
|
+ image_url = DevicePushService.create_obs_signed_url(key, 'GET')
|
|
else:
|
|
else:
|
|
image_url = aws_s3_client.generate_presigned_url(
|
|
image_url = aws_s3_client.generate_presigned_url(
|
|
'get_object', Params={'Bucket': bucket, 'Key': key}, ExpiresIn=3600)
|
|
'get_object', Params={'Bucket': bucket, 'Key': key}, ExpiresIn=3600)
|
|
@@ -805,6 +814,7 @@ class DevicePushService:
|
|
"""
|
|
"""
|
|
res_data = {'code': 0, 'msg': 'success'}
|
|
res_data = {'code': 0, 'msg': 'success'}
|
|
is_st = kwargs['is_st']
|
|
is_st = kwargs['is_st']
|
|
|
|
+ storage_location = kwargs['storage_location']
|
|
if is_st == 0 or is_st == 2:
|
|
if is_st == 0 or is_st == 2:
|
|
res_data['msg'] = 'success 0 or 2'
|
|
res_data['msg'] = 'success 0 or 2'
|
|
elif is_st == 1:
|
|
elif is_st == 1:
|
|
@@ -815,15 +825,14 @@ class DevicePushService:
|
|
else: # 1:国外
|
|
else: # 1:国外
|
|
params['Bucket'] = 'foreignpush'
|
|
params['Bucket'] = 'foreignpush'
|
|
# 区域是国外 并且存储位置OCI
|
|
# 区域是国外 并且存储位置OCI
|
|
- if kwargs['region'] == 1 and kwargs['storage_location'] in [3, 4]:
|
|
|
|
|
|
+ if kwargs['region'] == 1 and storage_location in [3, 4]:
|
|
# OCI
|
|
# OCI
|
|
- img_url = DevicePushService.create_oci_req_url(kwargs['storage_location'], params['Bucket'],
|
|
|
|
- key_name)
|
|
|
|
|
|
+ img_url = DevicePushService.create_oci_req_url(storage_location, params['Bucket'], key_name)
|
|
res_data['img_push'] = img_url
|
|
res_data['img_push'] = img_url
|
|
res_data['msg'] = 'success 1'
|
|
res_data['msg'] = 'success 1'
|
|
else:
|
|
else:
|
|
- # AWS
|
|
|
|
- img_url = DevicePushService.generate_s3_url(kwargs['aws_s3_client'], params)
|
|
|
|
|
|
+ # 华为云
|
|
|
|
+ img_url = DevicePushService.create_obs_signed_url(key_name, 'PUT')
|
|
res_data['img_push'] = img_url
|
|
res_data['img_push'] = img_url
|
|
res_data['msg'] = 'success 1'
|
|
res_data['msg'] = 'success 1'
|
|
elif is_st == 3:
|
|
elif is_st == 3:
|
|
@@ -833,20 +842,20 @@ class DevicePushService:
|
|
else: # 1:国外
|
|
else: # 1:国外
|
|
params = {'Bucket': 'foreignpush'}
|
|
params = {'Bucket': 'foreignpush'}
|
|
oci_client = None
|
|
oci_client = None
|
|
- if kwargs['storage_location'] in [3, 4]: # 三张图的时候提前获取实例化OCI
|
|
|
|
- region = 'eur' if kwargs['storage_location'] == 4 else 'us'
|
|
|
|
|
|
+ if storage_location in [3, 4]: # 三张图的时候提前获取实例化OCI
|
|
|
|
+ region = 'eur' if storage_location == 4 else 'us'
|
|
oci_client = OCIObjectStorage(region)
|
|
oci_client = OCIObjectStorage(region)
|
|
for i in range(kwargs['is_st']):
|
|
for i in range(kwargs['is_st']):
|
|
key_name = '{}/{}/{}_{}.jpeg'.format(kwargs['uid'], kwargs['channel'], kwargs['n_time'], i)
|
|
key_name = '{}/{}/{}_{}.jpeg'.format(kwargs['uid'], kwargs['channel'], kwargs['n_time'], i)
|
|
params['Key'] = key_name
|
|
params['Key'] = key_name
|
|
- if kwargs['region'] == 1 and kwargs['storage_location'] in [3, 4]:
|
|
|
|
|
|
+ if kwargs['region'] == 1:
|
|
# OCI
|
|
# OCI
|
|
- img_url = DevicePushService.create_oci_req_url(kwargs['storage_location'],
|
|
|
|
- params['Bucket'], key_name, oci_client)
|
|
|
|
|
|
+ img_url = DevicePushService.create_oci_req_url(storage_location, params['Bucket'], key_name,
|
|
|
|
+ oci_client)
|
|
img_url_list.append(img_url)
|
|
img_url_list.append(img_url)
|
|
else:
|
|
else:
|
|
- # AWS
|
|
|
|
- img_url = DevicePushService.generate_s3_url(kwargs['aws_s3_client'], params)
|
|
|
|
|
|
+ # 华为云
|
|
|
|
+ img_url = DevicePushService.create_obs_signed_url(key_name, 'PUT')
|
|
img_url_list.append(img_url)
|
|
img_url_list.append(img_url)
|
|
res_data['img_url_list'] = img_url_list
|
|
res_data['img_url_list'] = img_url_list
|
|
res_data['msg'] = 'success 3'
|
|
res_data['msg'] = 'success 3'
|
|
@@ -864,6 +873,20 @@ class DevicePushService:
|
|
)
|
|
)
|
|
return response_url
|
|
return response_url
|
|
|
|
|
|
|
|
+ @staticmethod
|
|
|
|
+ def create_obs_signed_url(key_name, method):
|
|
|
|
+ """
|
|
|
|
+ 生成对象存储预签名URL
|
|
|
|
+ @param key_name: 对象名称
|
|
|
|
+ @param method: 方法
|
|
|
|
+ @return: 预签名URL
|
|
|
|
+ """
|
|
|
|
+ obs_client = ObsClient(
|
|
|
|
+ access_key_id=HUAWEICLOUD_AK, secret_access_key=HUAWEICLOUD_SK, server=HUAWEICLOUD_OBS_SERVER)
|
|
|
|
+ res = obs_client.createSignedUrl(
|
|
|
|
+ method=method, bucketName=HUAWEICLOUD_PUSH_BUKET, objectKey=key_name, expires=3600)
|
|
|
|
+ return res.signedUrl
|
|
|
|
+
|
|
@staticmethod
|
|
@staticmethod
|
|
def check_share_permission(user_id, channel, uid):
|
|
def check_share_permission(user_id, channel, uid):
|
|
"""
|
|
"""
|