1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- import time
- import boto3
- import botocore
- from django.views.generic.base import View
- from Model.models import DeviceLogModel
- from Service.CommonService import CommonService
- from Object.ResponseObject import ResponseObject
- from Ansjer.config import REGION_NAME, ACCESS_KEY_ID, SECRET_ACCESS_KEY, LOG_BUCKET
- class DeviceLogView(View):
- def get(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- operation = kwargs.get('operation', None)
- return self.validate(request, request.GET, operation)
- def post(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- operation = kwargs.get('operation', None)
- return self.validate(request, request.POST, operation)
- def validate(self, request, request_dict, operation):
- response = ResponseObject()
- token = request_dict.get('token', None)
- time_stamp = request_dict.get('time_stamp', None)
- # 时间戳token校验
- if not CommonService.check_time_stamp_token(token, time_stamp):
- return response.json(13)
- if operation == 'getUploadUrl':
- return self.getUploadUrl(request_dict, response)
- elif operation == 'uploaded':
- return self.uploaded(request, request_dict, response)
- else:
- return response.json(414)
- def getUploadUrl(self, request_dict, response):
- uid = request_dict.get('uid', None)
- file_type = request_dict.get('file_type', None)
- if not all([uid, file_type]):
- return response.json(444)
- try:
- uid = CommonService.decode_data(uid)
- # 日志文件名
- name = CommonService.createOrderID()
- filename = str(name) + '.' + file_type
- obj = 'device_log/{uid}/'.format(uid=uid) + filename
- aws_s3_client = boto3.client(
- 's3',
- region_name=REGION_NAME,
- aws_access_key_id=ACCESS_KEY_ID,
- aws_secret_access_key=SECRET_ACCESS_KEY,
- config=botocore.client.Config(signature_version='s3v4'),
- )
- put_url = aws_s3_client.generate_presigned_url(
- ClientMethod='put_object',
- Params={
- 'Bucket': LOG_BUCKET,
- 'Key': obj
- },
- ExpiresIn=3600
- )
- return response.json(0, {'put_url': put_url, 'filename': filename})
- except Exception as e:
- print(e)
- return response.json(500, repr(e))
- def uploaded(self, request, request_dict, response):
- uid = request_dict.get('uid', None)
- status = request_dict.get('status', None)
- filename = request_dict.get('filename', None)
- if not all([uid, status, filename]):
- return response.json(444)
- try:
- status = int(status)
- uid = CommonService.decode_data(uid)
- ip = CommonService.get_ip_address(request)
- DeviceLogModel.objects.create(uid=uid, ip=ip, status=status, filename=filename)
- return response.json(0)
- except Exception as e:
- print(e)
- return response.json(500, repr(e))
|