Sfoglia il codice sorgente

Merge remote-tracking branch 'remotes/origin/test' into dev

tanghongbin 4 anni fa
parent
commit
3dc4620fad
5 ha cambiato i file con 318 aggiunte e 191 eliminazioni
  1. 1 0
      .gitignore
  2. 69 113
      Controller/CloudStorage.py
  3. 224 75
      Controller/CloudVod.py
  4. 23 2
      Controller/TestApi.py
  5. 1 1
      Model/models.py

+ 1 - 0
.gitignore

@@ -14,3 +14,4 @@
 /sdk_install
 /DB/mydata4vipday2.ipdb
 /venv
+

+ 69 - 113
Controller/CloudStorage.py

@@ -77,8 +77,8 @@ class CloudStorageView(View):
             return self.do_pay_by_ali_callback(request)
         elif operation == 'getsignsts':
             ip = CommonService.get_ip_address(request)
-            # return self.do_get_sign_sts(request_dict, ip, response)
-            return self.do_get_sign_sts_test(request_dict, ip, response)
+            return self.do_get_sign_sts(request_dict, ip, response)
+            # return self.do_get_sign_sts_test(request_dict, ip, response)
         elif operation == 'storeplaylist':
             return self.do_store_playlist(request_dict, response)
         elif operation == 'signplaym3u8':
@@ -106,85 +106,6 @@ class CloudStorageView(View):
             else:
                 return response.json(414)
 
-    def do_get_sign_sts_test(self, request_dict, ip, response):
-            uidToken = request_dict.get('uidToken', None)
-            utko = UidTokenObject(uidToken)
-            if utko.flag is False:
-                return response.json(444, 'uidToken')
-            uid = utko.UID
-            channel = utko.channel
-            print(channel)
-            print(uid)
-            now_time = int(time.time())
-            ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=now_time). \
-                values("bucket__mold", "bucket__bucket", "bucket__endpoint", "bucket__region", "endTime")
-            if ubqs.exists():
-                if ubqs[0]["bucket__mold"] == 1:
-                    # 亚马逊 s3 sts
-                    sts_qs = StsCrdModel.objects.filter(uid=uid, channel=channel). \
-                        values("addTime", "data")
-                    if sts_qs.exists():
-                        endTime = int(sts_qs[0]["addTime"]) + 3500
-                        if endTime > now_time:
-                            print(endTime)
-                            print(now_time)
-                            res = json.loads(sts_qs[0]["data"])
-                            return JsonResponse(status=200, data=res)
-                        # 套餐id
-                    storage = '{uid}/vod{channel}/'.format(uid=uid, channel=channel)
-                    bucket_name = ubqs[0]['bucket__bucket']
-                    endpoint = ubqs[0]['bucket__endpoint']
-                    region_id = ubqs[0]['bucket__region']
-
-                    ###############
-                    REGION_NAME = region_id
-                    boto3_sts = boto3.client(
-                        'sts',
-                        aws_access_key_id='AKIA2E67UIMD45Y3HL53',
-                        aws_secret_access_key='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',
-                        region_name=REGION_NAME
-                    )
-                    Policy = {
-                        "Version": "2012-10-17",
-                        "Statement": [
-                            {
-                                "Effect": "Allow",
-                                "Action": "s3:*",
-                                "Resource": ["arn:aws:s3:::azvod1/{uid_channel}/*".
-                                                 format(uid_channel=storage)]
-                            }
-                        ]
-                    }
-                    response = boto3_sts.get_federation_token(
-                        Name='{role_name}'.format(role_name=uid + '_' + str(channel)),
-                        Policy=json.dumps(Policy),
-                        DurationSeconds=7200
-                    )
-                    ###############
-                    res = {
-                        'AccessKeyId': response['Credentials']['AccessKeyId'],
-                        'AccessKeySecret': response['Credentials']['SecretAccessKey'],
-                        'SessionToken': response['Credentials']['SessionToken'],
-                        'Expiration': response['Credentials']['Expiration'],
-                        'expire': '3600',
-                        'endpoint': endpoint,
-                        'bucket_name': bucket_name,
-                        'arn': response['FederatedUser']['Arn'],
-                        'code': 0,
-                        'storage': storage,
-                        'endTime': ubqs[0]['endTime'],
-                        'ip': ip,
-                    }
-                    if sts_qs.exists():
-                        sts_qs.update(data=json.dumps(res,default=str), addTime=now_time)
-                    else:
-                        StsCrdModel.objects.create(uid=uid, channel=channel, data=json.dumps(res, default=str),
-                                                   addTime=now_time, type=1)
-                    return JsonResponse(status=200, data=res)
-                else:
-                    res = {'code': 404, 'msg': 'data not exists!'}
-                    return HttpResponse(json.dumps(res, ensure_ascii=False),
-                                        content_type="application/json,charset=utf-8")
 
     def do_test_play_m3u8(self, request_dict, response):
         playlist_entries = [
@@ -250,9 +171,9 @@ class CloudStorageView(View):
         mold = request_dict.get('mold', None)
         qs = Store_Meal.objects
         if mold:
-            qs = qs.filter(bucket__mold=1)
+            qs = qs.filter(bucket__mold=mold)
         else:
-            qs = qs.filter(bucket__mold=0)
+            qs = qs.all()
         qs = qs.values("id", "title", "content", "price",
                        "day", "currency", "bucket__storeDay",
                        "bucket__bucket", "bucket__area", "type",
@@ -338,6 +259,8 @@ class CloudStorageView(View):
         now_time = int(time.time())
         ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=now_time). \
             values("bucket__mold", "bucket__bucket", "bucket__endpoint", "bucket__region", "endTime")
+        print('-------------bucket')
+        print(ubqs)
         if ubqs.exists():
             if ubqs[0]["bucket__mold"] == 0:
                 # 阿里云 oss sts
@@ -419,7 +342,7 @@ class CloudStorageView(View):
                         res = json.loads(sts_qs[0]["data"])
                         return JsonResponse(status=200, data=res)
                     # 套餐id
-                storage = '{uid}/vod{channel}/'.format(uid=uid, channel=channel)
+                # storage = '{uid}/vod{channel}/'.format(uid=uid, channel=channel)
                 bucket_name = ubqs[0]['bucket__bucket']
                 endpoint = ubqs[0]['bucket__endpoint']
                 region_id = ubqs[0]['bucket__region']
@@ -432,17 +355,20 @@ class CloudStorageView(View):
                     aws_secret_access_key='ckYLg4Lo9ZXJIcJEAKkzf2rWvs8Xth1FCjqiAqUw',
                     region_name=REGION_NAME
                 )
+                print('----------test')
+                print(REGION_NAME)
                 Policy = {
                     "Version": "2012-10-17",
                     "Statement": [
                         {
                             "Effect": "Allow",
                             "Action": "s3:*",
-                            "Resource": ["arn:aws:s3:::azvod1/{uid_channel}/*".
-                                             format(uid_channel=storage)]
+                            "Resource": ["arn:aws:s3:::{bucket_name}/{uid}/*".
+                                             format(bucket_name=bucket_name,uid=uid)]
                         }
                     ]
                 }
+                print(Policy)
                 response = boto3_sts.get_federation_token(
                     Name='{role_name}'.format(role_name=uid + '_' + channel),
                     Policy=json.dumps(Policy),
@@ -459,7 +385,7 @@ class CloudStorageView(View):
                     'bucket_name': bucket_name,
                     'arn': response['FederatedUser']['Arn'],
                     'code': 0,
-                    'storage': storage,
+                    'storage': uid,
                     'endTime': ubqs[0]['endTime'],
                     'ip': ip,
                 }
@@ -577,7 +503,8 @@ class CloudStorageView(View):
                             channel=channel,
                             time=storeTime,
                             endTime=end_time,
-                            bucket_id=bucket_id
+                            bucket_id=bucket_id,
+                            sec=sec,
                         )
                         res = {'code': 0, 'msg': '存储成功'}
                         return HttpResponse(json.dumps(res, ensure_ascii=False),
@@ -597,6 +524,7 @@ class CloudStorageView(View):
                             endTime=end_time,
                             bucket_id=bucket_id,
                             fg=fg,
+                            sec=sec,
                         )
                         res = {'code': 0, 'msg': '存储成功'}
                         return HttpResponse(json.dumps(res, ensure_ascii=False),
@@ -612,35 +540,61 @@ class CloudStorageView(View):
             res = {'code': 404, 'msg': '设备未购买'}
             return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
 
+    # def do_change_vod_status(self, request_dict, userID, response):
+    #     uid = request_dict.get('uid', None)
+    #     status = request_dict.get('status', None)
+    #     channel = request_dict.get('channel', None)
+    #     if all([uid, status, channel]):
+    #         dv_qs = Device_Info.objects.filter(UID=uid, userID_id=userID, isShare=False, isExist=1)
+    #         if dv_qs.exists():
+    #             now_time = int(time.time())
+    #             ub_qs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=now_time)
+    #             if ub_qs.exists():
+    #                 ub_qs.status = status
+    #                 ub_qs.save()
+    #                 if status == 0:
+    #                     return response.json(0)
+    #                 else:
+    #                     utko = UidTokenObject()
+    #                     utko.generate(data={'uid': uid, 'channel': channel})
+    #                     uidTK = utko.token
+    #                     uidTkUrl = "{SERVER_DOMAIN}cloudstorage/getsignsts?uidToken={uidToken}". \
+    #                         format(uidToken=uidTK, SERVER_DOMAIN=SERVER_DOMAIN)
+    #                     storeHlsUrl = "{SERVER_DOMAIN}cloudstorage/storeplaylist?uidToken={uidToken}". \
+    #                         format(uidToken=uidTK, SERVER_DOMAIN=SERVER_DOMAIN)
+    #                     return response.json(0, {'uidTkUrl': uidTkUrl, 'storeHlsUrl': storeHlsUrl})
+    #             else:
+    #                 return response.json(10, '未购买')
+    #         else:
+    #             return response.json(12)
+    #     else:
+    #         return response.json(444, 'uid,status,channel')
+
     def do_change_vod_status(self, request_dict, userID, response):
         uid = request_dict.get('uid', None)
         status = request_dict.get('status', None)
         channel = request_dict.get('channel', None)
-        if all([uid, status, channel]):
-            dv_qs = Device_Info.objects.filter(UID=uid, userID_id=userID, isShare=False, isExist=1)
-            if dv_qs.exists():
-                now_time = int(time.time())
-                ub_qs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=now_time)
-                if ub_qs.exists():
-                    ub_qs.status = status
-                    ub_qs.save()
-                    if status == 0:
-                        return response.json(0)
-                    else:
-                        utko = UidTokenObject()
-                        utko.generate(data={'uid': uid, 'channel': channel})
-                        uidTK = utko.token
-                        uidTkUrl = "{SERVER_DOMAIN}cloudstorage/getsignsts?uidToken={uidToken}". \
-                            format(uidToken=uidTK, SERVER_DOMAIN=SERVER_DOMAIN)
-                        storeHlsUrl = "{SERVER_DOMAIN}cloudstorage/storeplaylist?uidToken={uidToken}". \
-                            format(uidToken=uidTK, SERVER_DOMAIN=SERVER_DOMAIN)
-                        return response.json(0, {'uidTkUrl': uidTkUrl, 'storeHlsUrl': storeHlsUrl})
-                else:
-                    return response.json(10, '未购买')
-            else:
-                return response.json(12)
-        else:
+        if not uid or not status or not channel:
             return response.json(444, 'uid,status,channel')
+        dvqs = Device_Info.objects.filter(UID=uid, userID_id=userID, isShare=False)
+        if not dvqs.exists():
+            return response.json(12)
+        ubqs = UID_Bucket.objects.filter(channel=channel, uid=uid)
+        if not ubqs.exists():
+            return response.json(10, '未购买')
+        now_time = int(time.time())
+        if now_time > ubqs[0].endTime:
+            return response.json(10, '已过期')
+        ubqs.update(status=status)
+        if status == 0:
+            return response.json(0)
+        utko = UidTokenObject()
+        utko.generate(data={'uid': uid, 'channel': channel})
+        uidTkUrl = "{SERVER_DOMAIN}cloudstorage/getsignsts?uidToken={uidToken}". \
+            format(uidToken=utko.token, SERVER_DOMAIN=SERVER_DOMAIN)
+        storeHlsUrl = "{SERVER_DOMAIN}cloudstorage/storeplaylist?uidToken={uidToken}". \
+            format(uidToken=utko.token, SERVER_DOMAIN=SERVER_DOMAIN)
+        return response.json(0, {'uidTkUrl': uidTkUrl, 'storeHlsUrl': storeHlsUrl})
 
     def do_pay_error(self):
         response = HttpResponse()
@@ -985,6 +939,8 @@ class CloudStorageView(View):
             else:
                 if order_string:
                     redirectUrl = aliPayObj.alipay_prefix + order_string
+                    print('---------tttt')
+                    print(redirectUrl)
                     Order_Model.objects.create(orderID=orderID, UID=uid, channel=channel, userID_id=userID,
                                                desc=content, payType=pay_type, payTime=nowTime,
                                                price=price, currency=currency, addTime=nowTime, updTime=nowTime,
@@ -994,4 +950,4 @@ class CloudStorageView(View):
                                                           'result': {"redirectUrl": redirectUrl, "orderID": orderID},
                                                           'error_code': 0})
                 else:
-                    return response.json(10, '生成订单错误')
+                    return response.json(10, '生成订单错误.')

+ 224 - 75
Controller/CloudVod.py

@@ -387,7 +387,7 @@ class CloudVodView(View):
     		color : green
     	}
     	.content_img{
-    		width: 60px; 
+    		width: 60px;
     		height: 60px;
     	}
     	.bottom{
@@ -427,7 +427,7 @@ class CloudVodView(View):
     function payOKButton() {
         // 复杂数据
         console.log('success')
-        window.webkit.messageHandlers.jsCallOC.postMessage({"status": 1});
+        window.location.href="https://test.dvema.com/closePage";
     }
 	</script>
 </body> 
@@ -690,89 +690,238 @@ class CloudVodView(View):
                 return response.json(0, {"redirectUrl": approval_url, "orderID": orderID})
         return response.json(10, 'generate_order_false')
 
-    #  生成设备sts上传授权
+
     def do_getSts(self, request_dict, ip, response):
         uidToken = request_dict.get('uidToken', None)
         utko = UidTokenObject(uidToken)
         if utko.flag is False:
             return response.json(444, 'uidToken')
-        UID = utko.UID
+        uid = utko.UID
         channel = utko.channel
         print(channel)
-        print(UID)
-        ubqs = UID_Bucket.objects.filter(uid=UID, channel=channel, status=1). \
-            values('channel', 'bucket__bucket', 'bucket__endpoint', 'bucket__region', 'endTime')
+        print(uid)
         now_time = int(time.time())
-        if not ubqs.exists():
-            res = {'code': 404, 'msg': '未购买'}
-            return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
-        elif ubqs[0]['endTime'] < now_time:
-            res = {'code': 404, 'msg': '过期'}
-            return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
-        oc_qs = OssCrdModel.objects.filter(uid=UID, channel=channel).values("addTime", "data")
-        if oc_qs.exists():
-            endTime = int(oc_qs[0]["addTime"]) + 3500
-            if endTime > now_time:
-                print(endTime)
-                print(now_time)
-                res = json.loads(oc_qs[0]["data"])
+        ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=now_time). \
+            values("bucket__mold", "bucket__bucket", "bucket__endpoint", "bucket__region", "endTime")
+        if ubqs.exists():
+            if ubqs[0]["bucket__mold"] == 0:
+                # 阿里云 oss sts
+                oc_qs = OssCrdModel.objects.filter(uid=uid, channel=channel). \
+                    values("addTime", "data")
+                if oc_qs.exists():
+                    endTime = int(oc_qs[0]["addTime"]) + 3500
+                    if endTime > now_time:
+                        print(endTime)
+                        print(now_time)
+                        res = json.loads(oc_qs[0]["data"])
+                        return JsonResponse(status=200, data=res)
+                # 套餐id
+                storage = '{uid}/vod{channel}/'.format(uid=uid, channel=channel)
+                bucket_name = ubqs[0]['bucket__bucket']
+                endpoint = ubqs[0]['bucket__endpoint']
+                access_key_id = OSS_STS_ACCESS_KEY
+                access_key_secret = OSS_STS_ACCESS_SECRET
+                region_id = ubqs[0]['bucket__region']
+                role_arn = OSS_ROLE_ARN
+                clt = client.AcsClient(access_key_id, access_key_secret, region_id)
+                req = AssumeRoleRequest.AssumeRoleRequest()
+                # 设置返回值格式为JSON。
+                req.set_accept_format('json')
+                req.set_RoleArn(role_arn)
+                req.set_RoleSessionName(uid + '_' + channel)
+                req.set_DurationSeconds(3600)
+                Resource_access = "acs:oss:*:*:{bucket_name}/{uid_channel}*". \
+                    format(bucket_name=bucket_name, uid_channel=storage)
+                print(Resource_access)
+                policys = {
+                    "Version": "1",
+                    "Statement": [
+                        {
+                            "Action": ["oss:PutObject", "oss:DeleteObject", ],
+                            "Resource": [Resource_access],
+                            "Effect": "Allow",
+                            "Condition": {
+                                "IpAddress": {"acs:SourceIp": ip}
+                                # "IpAddress": {"acs:SourceIp": "120.237.157.184"}
+                                # "IpAddress": {"acs:SourceIp": "*"}
+                            }
+                        }
+                    ]
+                }
+                req.set_Policy(Policy=json.dumps(policys))
+                body = clt.do_action(req)
+                # 使用RAM账号的AccessKeyId和AccessKeySecret向STS申请临时token。
+                token = json.loads(body.decode('utf-8'))
+                print(token)
+                res = {
+                    'AccessKeyId': token['Credentials']['AccessKeyId'],
+                    'AccessKeySecret': token['Credentials']['AccessKeySecret'],
+                    'SecurityToken': token['Credentials']['SecurityToken'],
+                    'Expiration': token['Credentials']['Expiration'],
+                    'expire': '3600',
+                    'endpoint': endpoint,
+                    'bucket_name': bucket_name,
+                    'arn': token['AssumedRoleUser']['Arn'],
+                    'code': 0,
+                    'storage': storage,
+                    'endTime': ubqs[0]['endTime'],
+                    'ip': ip}
+                if oc_qs.exists():
+                    oc_qs.update(data=json.dumps(res), addTime=now_time)
+                else:
+                    OssCrdModel.objects.create \
+                        (uid=uid, channel=channel, data=json.dumps(res), addTime=now_time)
                 return JsonResponse(status=200, data=res)
-        # 套餐id
-        storage = '{uid}/vod{channel}/'.format(uid=UID, channel=channel)
-        bucket_name = ubqs[0]['bucket__bucket']
-        endpoint = ubqs[0]['bucket__endpoint']
-        access_key_id = OSS_STS_ACCESS_KEY
-        access_key_secret = OSS_STS_ACCESS_SECRET
-        region_id = ubqs[0]['bucket__region']
-        role_arn = OSS_ROLE_ARN
-        clt = client.AcsClient(access_key_id, access_key_secret, region_id)
-        req = AssumeRoleRequest.AssumeRoleRequest()
-        # 设置返回值格式为JSON。
-        req.set_accept_format('json')
-        req.set_RoleArn(role_arn)
-        req.set_RoleSessionName(UID)
-        req.set_DurationSeconds(3600)
-        Resource_access = "acs:oss:*:*:{bucket_name}/{uid_channel}*".format(bucket_name=bucket_name,
-                                                                            uid_channel=storage)
-        print(Resource_access)
-        policys = {
-            "Version": "1",
-            "Statement": [
-                {
-                    "Action": ["oss:PutObject", "oss:DeleteObject", ],
-                    "Resource": [Resource_access],
-                    "Effect": "Allow",
-                    "Condition": {
-                        "IpAddress": {"acs:SourceIp": ip}
-                        # "IpAddress": {"acs:SourceIp": "120.237.157.184"}
-                        # "IpAddress": {"acs:SourceIp": "*"}
-                    }
+            elif ubqs[0]["bucket__mold"] == 1:
+                # 亚马逊 s3 sts
+                sts_qs = StsCrdModel.objects.filter(uid=uid, channel=channel). \
+                    values("addTime", "data")
+                if sts_qs.exists():
+                    endTime = int(sts_qs[0]["addTime"]) + 3500
+                    if endTime > now_time:
+                        print(endTime)
+                        print(now_time)
+                        res = json.loads(sts_qs[0]["data"])
+                        return JsonResponse(status=200, data=res)
+                    # 套餐id
+                storage = '{uid}/vod{channel}/'.format(uid=uid, channel=channel)
+                bucket_name = ubqs[0]['bucket__bucket']
+                endpoint = ubqs[0]['bucket__endpoint']
+                region_id = ubqs[0]['bucket__region']
+
+                ###############
+                REGION_NAME = region_id
+                boto3_sts = boto3.client(
+                    'sts',
+                    aws_access_key_id='AKIA2E67UIMD45Y3HL53',
+                    aws_secret_access_key='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',
+                    region_name=REGION_NAME
+                )
+                Policy = {
+                    "Version": "2012-10-17",
+                    "Statement": [
+                        {
+                            "Effect": "Allow",
+                            "Action": "s3:*",
+                            "Resource": ["arn:aws:s3:::azvod1/{uid_channel}/*".
+                                             format(uid_channel=storage)]
+                        }
+                    ]
                 }
-            ]
-        }
-        req.set_Policy(Policy=json.dumps(policys))
-        body = clt.do_action(req)
-        # 使用RAM账号的AccessKeyId和AccessKeySecret向STS申请临时token。
-        token = json.loads(body.decode('utf-8'))
-        print(token)
-        res = {
-            'AccessKeyId': token['Credentials']['AccessKeyId'],
-            'AccessKeySecret': token['Credentials']['AccessKeySecret'],
-            'SecurityToken': token['Credentials']['SecurityToken'],
-            'Expiration': token['Credentials']['Expiration'],
-            'expire': '3600',
-            'endpoint': endpoint,
-            'bucket_name': bucket_name,
-            'arn': token['AssumedRoleUser']['Arn'],
-            'code': 0,
-            'storage': storage,
-            'endTime': ubqs[0]['endTime'],
-            'ip': ip}
-        if oc_qs.exists():
-            oc_qs.update(data=json.dumps(res), addTime=now_time)
-        else:
-            OssCrdModel.objects.create(uid=UID, channel=channel, data=json.dumps(res), addTime=now_time)
-        return JsonResponse(status=200, data=res)
+                response = boto3_sts.get_federation_token(
+                    Name='{role_name}'.format(role_name=uid + '_' + channel),
+                    Policy=json.dumps(Policy),
+                    DurationSeconds=7200
+                )
+                ###############
+                res = {
+                    'AccessKeyId': response['Credentials']['AccessKeyId'],
+                    'AccessKeySecret': response['Credentials']['SecretAccessKey'],
+                    'SessionToken': response['Credentials']['SessionToken'],
+                    'Expiration': response['Credentials']['Expiration'],
+                    'expire': '3600',
+                    'endpoint': endpoint,
+                    'bucket_name': bucket_name,
+                    'arn': response['FederatedUser']['Arn'],
+                    'code': 0,
+                    'storage': storage,
+                    'endTime': ubqs[0]['endTime'],
+                    'ip': ip,
+                }
+                if sts_qs.exists():
+                    sts_qs.update(data=json.dumps(res,default=str), addTime=now_time)
+                else:
+                    StsCrdModel.objects.create(uid=uid, channel=channel, data=json.dumps(res, default=str),
+                                               addTime=now_time, type=1)
+                return JsonResponse(status=200, data=res)
+            else:
+                res = {'code': 404, 'msg': 'data not exists!'}
+                return HttpResponse(json.dumps(res, ensure_ascii=False),
+                                    content_type="application/json,charset=utf-8")
+
+    #  生成设备sts上传授权
+    # def do_getSts(self, request_dict, ip, response):
+    #     uidToken = request_dict.get('uidToken', None)
+    #     utko = UidTokenObject(uidToken)
+    #     if utko.flag is False:
+    #         return response.json(444, 'uidToken')
+    #     UID = utko.UID
+    #     channel = utko.channel
+    #     print(channel)
+    #     print(UID)
+    #     ubqs = UID_Bucket.objects.filter(uid=UID, channel=channel, status=1). \
+    #         values('channel', 'bucket__bucket', 'bucket__endpoint', 'bucket__region', 'endTime')
+    #     now_time = int(time.time())
+    #     if not ubqs.exists():
+    #         res = {'code': 404, 'msg': '未购买'}
+    #         return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
+    #     elif ubqs[0]['endTime'] < now_time:
+    #         res = {'code': 404, 'msg': '过期'}
+    #         return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
+    #     oc_qs = OssCrdModel.objects.filter(uid=UID, channel=channel).values("addTime", "data")
+    #     if oc_qs.exists():
+    #         endTime = int(oc_qs[0]["addTime"]) + 3500
+    #         if endTime > now_time:
+    #             print(endTime)
+    #             print(now_time)
+    #             res = json.loads(oc_qs[0]["data"])
+    #             return JsonResponse(status=200, data=res)
+    #     # 套餐id
+    #     storage = '{uid}/vod{channel}/'.format(uid=UID, channel=channel)
+    #     bucket_name = ubqs[0]['bucket__bucket']
+    #     endpoint = ubqs[0]['bucket__endpoint']
+    #     access_key_id = OSS_STS_ACCESS_KEY
+    #     access_key_secret = OSS_STS_ACCESS_SECRET
+    #     region_id = ubqs[0]['bucket__region']
+    #     role_arn = OSS_ROLE_ARN
+    #     clt = client.AcsClient(access_key_id, access_key_secret, region_id)
+    #     req = AssumeRoleRequest.AssumeRoleRequest()
+    #     # 设置返回值格式为JSON。
+    #     req.set_accept_format('json')
+    #     req.set_RoleArn(role_arn)
+    #     req.set_RoleSessionName(UID)
+    #     req.set_DurationSeconds(3600)
+    #     Resource_access = "acs:oss:*:*:{bucket_name}/{uid_channel}*".format(bucket_name=bucket_name,
+    #                                                                         uid_channel=storage)
+    #     print(Resource_access)
+    #     policys = {
+    #         "Version": "1",
+    #         "Statement": [
+    #             {
+    #                 "Action": ["oss:PutObject", "oss:DeleteObject", ],
+    #                 "Resource": [Resource_access],
+    #                 "Effect": "Allow",
+    #                 "Condition": {
+    #                     "IpAddress": {"acs:SourceIp": ip}
+    #                     # "IpAddress": {"acs:SourceIp": "120.237.157.184"}
+    #                     # "IpAddress": {"acs:SourceIp": "*"}
+    #                 }
+    #             }
+    #         ]
+    #     }
+    #     req.set_Policy(Policy=json.dumps(policys))
+    #     body = clt.do_action(req)
+    #     # 使用RAM账号的AccessKeyId和AccessKeySecret向STS申请临时token。
+    #     token = json.loads(body.decode('utf-8'))
+    #     print(token)
+    #     res = {
+    #         'AccessKeyId': token['Credentials']['AccessKeyId'],
+    #         'AccessKeySecret': token['Credentials']['AccessKeySecret'],
+    #         'SecurityToken': token['Credentials']['SecurityToken'],
+    #         'Expiration': token['Credentials']['Expiration'],
+    #         'expire': '3600',
+    #         'endpoint': endpoint,
+    #         'bucket_name': bucket_name,
+    #         'arn': token['AssumedRoleUser']['Arn'],
+    #         'code': 0,
+    #         'storage': storage,
+    #         'endTime': ubqs[0]['endTime'],
+    #         'ip': ip}
+    #     if oc_qs.exists():
+    #         oc_qs.update(data=json.dumps(res), addTime=now_time)
+    #     else:
+    #         OssCrdModel.objects.create(uid=UID, channel=channel, data=json.dumps(res), addTime=now_time)
+    #     return JsonResponse(status=200, data=res)
 
     def do_paypal_execute(self, request_dict, response):
         paymentId = request_dict.get('paymentId', None)

+ 23 - 2
Controller/TestApi.py

@@ -99,8 +99,11 @@ class testView(View):
         elif operation == 'generateToken':
             userID = '158943604783713800138000'
             return self.generate_token(request_dict,userID)
+        elif operation == 'test_upload_s3':
+            userID = '158943604783713800138000'
+            return self.test_upload_s3(request_dict)
         else:
-            return 12344444
+            return 123
 
     def createBucket(self):
 
@@ -686,4 +689,22 @@ class testView(View):
         #uidToken
         # utko = UidTokenObject()
         # res = utko.generate(data={'uid':'86YC8Z192VB1VMKU111A','channel':1})
-        return JsonResponse(status=200, data=res,safe=False)
+        return JsonResponse(status=200, data=res,safe=False)
+
+    def test_upload_s3(self,request_dict):
+        aws_key = "ASIA2E67UIMDVVZU3A7S" #【你的 aws_access_key】
+        aws_secret = "Ug1IYux/NOeXsXBgkBfl4nHvsrFS31XU/OX9j9t8" # 【你的 aws_secret_key】
+        aws_session_token = "FwoGZXIvYXdzEFsaDMwiG7k0GXKFsXlU9iLjAa2rLSzefbz9B64d2UQJK3Nq1mK+YOoFK52Nr4CdLu/oHTt+dNTM+/tv372YLTi2MxCvhAhACEle2BiccEHSj9KFdh+gceYILEqHVpcXHldqrttknHpClu8gRLK6pGYojZ5gUcKZ5OA/rOQZPHaCIkY6cjnp5/qyBb87m6bhta6PljCba3pwaNQehy0gMNabZrukKMXt37kEjzfbI19lYozCVvb118AW1B6/abBTTST6ARZBsPfbzrvis5QOp4skdYrZwrYsBk1mbZVXSKo39+KV1KoMhncGQ2CRiG4+wnnMrWcmKMGk//wFMikzL7YaV8ZLkWKAurtKoo/D3EFnqNF/JmzAVMMX80rq9J8CuXKEtdDYkw=="
+        session = Session(aws_access_key_id=aws_key,
+                          aws_secret_access_key=aws_secret,
+                          aws_session_token=aws_session_token,
+                          region_name="ap-southeast-1") # 此处根据自己的 s3 地区位置改变
+        s3 = session.resource("s3")
+        client = session.client("s3")
+        bucket = "asj-oct-ipc" # 【你 bucket 的名字】 # 首先需要保.证 s3 上已经存在该存储桶,否则报错
+        upload_data = open("./././static/log/error.log", "rb")
+        upload_key = "86YC8Z192VB1VMKU111A/test"
+        file_obj = s3.Bucket(bucket).put_object(Key=upload_key, Body=upload_data)
+        print('--------')
+        print(file_obj)
+        return JsonResponse(status=200, data=file_obj,safe=False)

+ 1 - 1
Model/models.py

@@ -532,7 +532,7 @@ class Order_Model(models.Model):
     uid_bucket_id = models.IntegerField(default=0, verbose_name='关联uid_bucket的字段')
     commodity_type = models.SmallIntegerField(default=0, verbose_name='云存储套餐类型')
     commodity_code = models.CharField(default='', max_length=32, verbose_name='套餐规格码')
-    pay_url = models.CharField(max_length=500, default='', verbose_name='支付url')
+    pay_url = models.CharField(max_length=1000, default='', verbose_name='支付url')
     paypal = models.CharField(max_length=500, null=True, blank=True, verbose_name='支付批准url')