from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden import cv2 import numpy as np import base64 import os from django.views.decorators.csrf import csrf_exempt import json import datetime from django.conf import settings from django.core.files.base import ContentFile from proctoring.models.image import Image from proctoring.models.imageTypes import ImageTypes @csrf_exempt def save_screenshot(request): if request.method != "POST": return HttpResponseForbidden("Only POST requests are allowed") try: data = json.loads(request.body) base64image = data.get("base64_image", "") shareId = data.get("shareId", "") except json.JSONDecodeError: return HttpResponseBadRequest("Invalid JSON data") if base64image == "" or shareId == "": return HttpResponseBadRequest("Missing parameters") save_folder = os.path.join("proctoring_images", shareId, "screenshots") img_bytes = base64.b64decode(base64image) img_np = np.frombuffer(img_bytes, dtype=np.uint8) img = cv2.imdecode(img_np, cv2.IMREAD_COLOR) imgWidth=240 imgHeight=135 img = cv2.resize(img,(imgWidth,imgHeight),interpolation=cv2.INTER_AREA) outputImage = cv2.imencode(".jpg", img)[1].tobytes() date=datetime.datetime.now() filename = "{date:%Y-%m-%d_%H.%M.%S}.jpg".format(date) filepath = os.path.join(save_folder, filename) content_file = ContentFile(outputImage, name=filename) filepath = settings.s3_storage.save(os.path.join(filepath), content_file) image = Image( path=f"{settings.AWS_S3_ACCESS_DOMAIN}/{filepath}", personCount=0, prohibitedObjectsCount=0, type=ImageTypes.ScreenShot, shareId=shareId, timeTaken=date ) image.save() return HttpResponse()