lhq 4 жил өмнө
parent
commit
05e5a1b2c2
1 өөрчлөгдсөн 71 нэмэгдсэн , 30 устгасан
  1. 71 30
      Controller/PcInfo.py

+ 71 - 30
Controller/PcInfo.py

@@ -1,10 +1,11 @@
 import hashlib
+import logging
 import shutil
 import time
 import traceback
 import os
 from urllib import request, parse
-
+import requests
 from django.http import HttpResponse
 
 from django.views.generic.base import View
@@ -41,9 +42,9 @@ class PcInfo(View):
             return response.json(444, 'operation')
         else:
 
-            if operation == 'query':
+            if operation == 'query':    # pc端查询
                 return self.query(request_dict, response)
-            elif operation == 'queryall':
+            elif operation == 'queryall':   # 后台查询
                 return self.queryall(request_dict, response)
             elif operation == 'addandupload':   # 上传到服务器
                 return self.addandupload(request_dict, response, request)
@@ -55,6 +56,8 @@ class PcInfo(View):
                 return self.s3addandupload(request_dict, response, request)
             elif operation == 's3download':
                 return self.s3download(request_dict, response)
+            elif operation == 's3delete':
+                return self.s3delete(request_dict, response)
             else:
                 return response.json(414)
 
@@ -236,6 +239,7 @@ class PcInfo(View):
             return response.json(0)
 
     def s3addandupload(self, request_dict, response, request):
+        logger = logging.getLogger('info')
         token = request_dict.get('token', None)
         tko = TokenObject(token)
         response.lang = tko.lang
@@ -249,7 +253,7 @@ class PcInfo(View):
         pc_version = request_dict.get('pc_version', None)
         pc_test = request_dict.get('pc_test', None)
         lang = request_dict.get('lang', None)
-        file_name = request_dict.get('file_name', None)
+        file_name = request.FILES.get('file_name', None)
         param_flag = CommonService.get_param_flag(
             data=[pc_name, bundle_version, pc_version, pc_test, lang, file_name])
         if param_flag is not True:
@@ -261,23 +265,27 @@ class PcInfo(View):
                 return response.json(174)
             try:
                 # 把安装包上传到s3
-                aws_s3_guowai = boto3.client(
+                aws_s3_guonei = boto3.client(
                     's3',
-                    aws_access_key_id=AWS_ACCESS_KEY_ID[1],
-                    aws_secret_access_key=AWS_SECRET_ACCESS_KEY[1],
+                    aws_access_key_id=AWS_ACCESS_KEY_ID[0],
+                    aws_secret_access_key=AWS_SECRET_ACCESS_KEY[0],
                     config=botocore.client.Config(signature_version='s3v4'),
-                    region_name='us-east-1'
+                    region_name='cn-northwest-1'
                 )
-                download_link = '{pc_name}/{bundle_version}/{pc_version}/{file_s}'.format(
-                    pc_name=pc_name, bundle_version=bundle_version, pc_version=pc_version, file_s=str(file_name))
-                response_url = aws_s3_guowai.generate_presigned_url(
+                download_link = '{pc_name}/{pc_version}_{bundle_version}_{pc_test}_{file_s}'.format(
+                    pc_name=pc_name, pc_version=pc_version, bundle_version=bundle_version,
+                    pc_test=pc_test, file_s=str(file_name))
+                response_url = aws_s3_guonei.generate_presigned_url(
                     ClientMethod='put_object',
                     Params={
-                        'Bucket': 'pc-installation-package',
+                        'Bucket': 'pc-package',
                         'Key': download_link
                     },
                     ExpiresIn=3600
                 )
+                logger.info('开始上传')
+                requests.put(response_url, data=file_name)
+                logger.info('上传完成')
                 add_time = time.time()
                 create_dict = {
                     'pc_name': pc_name,
@@ -315,37 +323,70 @@ class PcInfo(View):
         pc_name = request_dict.get('pc_name', None)
         bundle_version = request_dict.get('bundle_version', None)
         pc_version = request_dict.get('pc_version', None)
-        if not pc_name or not pc_version or not bundle_version:
-            return response.json(444, 'pc_name,bundle_version,pc_version')
-        file = Pc_Info.objects.filter(pc_name=pc_name, bundle_version=bundle_version, pc_version=pc_version).values()
-        path = file[0]['download_link']
-        aws_s3_guowai = boto3.client(
+        pc_test = request_dict.get('pc_test', None)
+        param_flag = CommonService.get_param_flag(
+            data=[pc_name, bundle_version, pc_version, pc_test])
+        if param_flag is not True:
+            return response.json(444)
+        path = Pc_Info.objects.filter(pc_name=pc_name, bundle_version=bundle_version, pc_version=pc_version,
+                                      pc_test=pc_test).values('download_link')
+        if not path:
+            return response.json(173)
+        path = path[0]['download_link']
+        aws_s3_guonei = boto3.client(
             's3',
-            aws_access_key_id=AWS_ACCESS_KEY_ID[1],
-            aws_secret_access_key=AWS_SECRET_ACCESS_KEY[1],
+            aws_access_key_id=AWS_ACCESS_KEY_ID[0],
+            aws_secret_access_key=AWS_SECRET_ACCESS_KEY[0],
             config=botocore.client.Config(signature_version='s3v4'),
-            region_name='us-east-1'
+            region_name='cn-northwest-1'
         )
-        response_url = aws_s3_guowai.generate_presigned_url(
+        response_url = aws_s3_guonei.generate_presigned_url(
             ClientMethod='get_object',
             Params={
-                'Bucket': 'pc-installation-package',
+                'Bucket': 'pc-package',
                 'Key': path
             },
             ExpiresIn=3600
         )
-        res = {'pc_name': file[0]['pc_name'],
-               'bundle_version': file[0]['bundle_version'],
-               'pc_version': file[0]['pc_version'],
-               'pc_test': file[0]['pc_test'],
-               'download_link': file[0]['download_link'],
-               'lang': file[0]['lang'],
-               'add_time': file[0]['add_time'],
-               'update_time': file[0]['update_time'],
+        res = {'path': path,
                'response_url': response_url
                }
         return response.json(0, res)
 
+    def s3delete(self, request_dict, response):
+        token = request_dict.get('token', None)
+        tko = TokenObject(token)
+        response.lang = tko.lang
+        if tko.code != 0:
+            return response.json(tko.code)
+        userID = tko.userID
+        if not userID:
+            return response.json(104)
+        id = request_dict.get('id', None)
+        param_flag = CommonService.get_param_flag(data=[id])
+        if param_flag is not True:
+            return response.json(444)
+        file = Pc_Info.objects.filter(id=id)
+        if not file.exists():
+            return response.json(173)
+        try:
+            # 删除s3和数据库里的相应数据
+            file_path = file[0].download_link
+            print(file_path)
+            aws_s3_guonei = boto3.client(
+                's3',
+                aws_access_key_id=AWS_ACCESS_KEY_ID[0],
+                aws_secret_access_key=AWS_SECRET_ACCESS_KEY[0],
+                config=botocore.client.Config(signature_version='s3v4'),
+                region_name='cn-northwest-1'
+            )
+            aws_s3_guonei.delete_object(Bucket='pc-package', Key=file_path)
+            file.delete()
+        except Exception as e:
+            return response.json(176, repr(e))
+        else:
+            return response.json(0)
+
 
 def getMD5orSHA265(fileName, encryptionType='MD5'):
     """