Răsfoiți Sursa

查询推送图片新增华为云

locky 1 an în urmă
părinte
comite
7f16073aca
4 a modificat fișierele cu 55 adăugiri și 2 ștergeri
  1. 6 0
      Ansjer/config.py
  2. 20 1
      Controller/DetectControllerV2.py
  3. 28 0
      Controller/TestApi.py
  4. 1 1
      Model/models.py

+ 6 - 0
Ansjer/config.py

@@ -36,6 +36,12 @@ PAY_TYPE_IN_APP_PURCHASE = 5
 PAY_TYPE_EXPERIENCE = 10
 PAY_TYPE_CDK = 11
 
+# 华为云配置
+HUAWEICLOUD_AK = 'TN9T7ZPN3QRBBQ9NQHNB'
+HUAWEICLOUD_SK = 'rIlTBJ85MUC1WNLyJBZM2077HTsQ0qJaJf4IpTjU'
+HUAWEICLOUD_OBS_SERVER = 'https://obs.cn-east-3.myhuaweicloud.com'
+HUAWEICLOUD_PUSH_BUKET = 'asj-push'
+
 # 阿里云AccessKey和AccessKeySecret
 ALI_ACCESS_KEY_ID = 'LTAI5t9BXQWTPfBEh2Qu8YNA'
 ALI_ACCESS_KEY_SECRET = '8TcEjHkHGsJaknbHlHzZP4HXQ7GuvT'

+ 20 - 1
Controller/DetectControllerV2.py

@@ -9,9 +9,11 @@ import redis
 from botocore import client
 from django.http import JsonResponse
 from django.views.generic.base import View
+from obs import ObsClient
 
 from Ansjer.config import DETECT_PUSH_DOMAIN, DETECT_PUSH_DOMAINS, DETECT_PUSH_DOMAIN_JIUAN, DETECT_PUSH_DOMAINS_JIUAN, \
-    OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, LOGGER, ALGORITHM_COMBO_TYPES
+    OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, LOGGER, ALGORITHM_COMBO_TYPES, \
+    HUAWEICLOUD_AK, HUAWEICLOUD_SK, HUAWEICLOUD_OBS_SERVER, HUAWEICLOUD_PUSH_BUKET
 from Ansjer.config import PUSH_BUCKET, CONFIG_INFO, CONFIG_CN, CONFIG_EUR, CONFIG_US
 from Ansjer.config import PUSH_REDIS_ADDRESS
 from Model.models import Device_Info, Equipment_Info, UidSetModel, UidPushModel, CompanyModel, SysMsgModel, \
@@ -356,8 +358,15 @@ class DetectControllerViewV2(View):
                 return response.json(0, {'datas': [], 'count': 0})
 
             res = []
+            # 华为云
+            obs_client = ObsClient(
+                access_key_id=HUAWEICLOUD_AK, secret_access_key=HUAWEICLOUD_SK, server=HUAWEICLOUD_OBS_SERVER)
+
+            # 阿里云
             auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
             oss_img_bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'apg')
+
+            # aws
             aws_s3 = boto3.client(
                 's3',
                 aws_access_key_id=AWS_ACCESS_KEY_ID[1],
@@ -372,6 +381,8 @@ class DetectControllerViewV2(View):
                 config=botocore.client.Config(signature_version='s3v4'),
                 region_name='cn-northwest-1'
             )
+
+            # oci
             # 国内生产环境默认不实例OCI对象
             oci = self.get_oci_client()
             redis_obj = RedisObject(3)
@@ -391,6 +402,10 @@ class DetectControllerViewV2(View):
                     thumbspng = '{}/{}/{}.jpeg'.format(uid, channel, event_time)
                     if storage_location == 1:  # 阿里云oss
                         img_url = oss_img_bucket.sign_url('GET', thumbspng, 300)
+                    elif storage_location == 5:  # 华为云
+                        res = obs_client.createSignedUrl(
+                            method='GET', bucketName=HUAWEICLOUD_PUSH_BUKET, objectKey=thumbspng, expires=300)
+                        img_url = res.signedUrl
                     elif storage_location in [3, 4]:
                         prefix_name = f'{uid}/'
                         img_url = DetectControllerViewV2.oci_object_url(oci, redis_obj, uid, prefix_name)
@@ -452,6 +467,10 @@ class DetectControllerViewV2(View):
                         thumbspng = '{}/{}/{}_{}.jpeg'.format(uid, channel, event_time, i)
                         if storage_location == 1:  # 阿里云oss
                             img_url = oss_img_bucket.sign_url('GET', thumbspng, 300)
+                        elif storage_location == 5:  # 华为云
+                            res = obs_client.createSignedUrl(
+                                method='GET', bucketName=HUAWEICLOUD_PUSH_BUKET, objectKey=thumbspng, expires=300)
+                            img_url = res.signedUrl
                         elif storage_location in [3, 4]:  # 国外OCI云
                             prefix_name = f'{uid}/'
                             img_url = DetectControllerViewV2.oci_object_url(oci, redis_obj, uid, prefix_name)

+ 28 - 0
Controller/TestApi.py

@@ -193,6 +193,8 @@ class testView(View):
             return self.get_token(request_dict, response)
         elif operation == 'langCountry':
             return self.lang_country(request_dict, response)
+        elif operation == 'getObsSignedUrl':
+            return self.getObsSignedUrl(request_dict, response)
         else:
             return response.json(414)
 
@@ -1421,3 +1423,29 @@ class testView(View):
         except Exception as e:
             print(e)
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+
+    @staticmethod
+    def getObsSignedUrl(request_dict, response):
+        """
+        华为对象存储生成上传对象的带授权信息的URL
+        @param request_dict: 请求参数
+        @param response: 响应对象
+        @return: response
+        """
+        from obs import ObsClient
+        ak = 'TN9T7ZPN3QRBBQ9NQHNB'
+        sk = 'rIlTBJ85MUC1WNLyJBZM2077HTsQ0qJaJf4IpTjU'
+        server = 'https://obs.cn-east-3.myhuaweicloud.com'
+        bucket_name = 'asj-push'
+        uid = '517J385BNUGP3CPP111A'
+        channel = '1'
+        now_time = str(int(time.time()))
+        object_key = '{}/{}/{}.jpeg'.format(uid, channel, now_time)
+        try:
+            obs_client = ObsClient(access_key_id=ak, secret_access_key=sk, server=server)
+            res = obs_client.createSignedUrl(
+                method='PUT', bucketName=bucket_name, objectKey=object_key, expires=3600)
+            return response.json(0, res)
+        except Exception as e:
+            print(e)
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))

+ 1 - 1
Model/models.py

@@ -352,7 +352,7 @@ class EquipmentInfo1(models.Model):
     alarm = models.CharField(default='', max_length=256, verbose_name='报警信息')
     # 0:无图, 1:单图, 3:多图
     is_st = models.PositiveSmallIntegerField(default=0, verbose_name='图片信息')
-    # 1: 阿里云, 2: AWS
+    # 1: 阿里云, 2: AWS, 3: oci美国凤凰城, 4: oci英国伦敦, 5: 华为云
     storage_location = models.PositiveSmallIntegerField(default=1, verbose_name='存储桶位置')
     border_coords = models.TextField(default='', verbose_name='ai类型图片边框位置信息')
     status = models.BooleanField(default=False, verbose_name='已读状态')  # 0: 未读, 1: 已读