diff --git a/src/person/controllers/update_controller.py b/src/person/controllers/update_controller.py index 84260fa..b0d9323 100644 --- a/src/person/controllers/update_controller.py +++ b/src/person/controllers/update_controller.py @@ -1,4 +1,5 @@ import json +import os from api.utils import failure_response from api.utils import success_response @@ -11,10 +12,11 @@ class UpdatePersonController: - def __init__(self, user, data, serializer): + def __init__(self, user, data, profile_pic, serializer): self._data = data self._serializer = serializer self._user = user + self._profile_pic = profile_pic self._person = self._user.person def process(self): @@ -23,7 +25,6 @@ def process(self): last_name = self._data.get("last_name") grade = self._data.get("grade") phone_number = self._data.get("phone_number") - profile_pic_base64 = self._data.get("profile_pic_base64") prompts = self._data.get("prompts") pronouns = self._data.get("pronouns") @@ -54,10 +55,11 @@ def process(self): self._user.save() self._person.save() - if profile_pic_base64 == "": + if not self._profile_pic: remove_profile_pic(self._user.id) - elif profile_pic_base64 is not None: - upload_profile_pic(self._user.id, profile_pic_base64) + else: + remove_profile_pic(self._user.id) + upload_profile_pic(self._user.id, os.environ.get("IMAGE_BUCKET_NAME"), self._profile_pic) self._user = User.objects.get(id=self._user.id) return success_response(self._serializer(self._user).data) diff --git a/src/person/utils.py b/src/person/utils.py index bda20c9..f7b8c42 100644 --- a/src/person/utils.py +++ b/src/person/utils.py @@ -4,13 +4,11 @@ import requests -def upload_profile_pic(user_id, profile_pic_base64): - """Uploads image to server and modifies user's profile_pic_url""" - request_body = { - "bucket": IMAGE_BUCKET_NAME, - "image": profile_pic_base64, - } - response = requests.post(IMAGE_UPLOAD_URL + "upload/", json=request_body) +def upload_profile_pic(user_id, bucket, image_file): + """Uploads image to server and modifies user's profile_pic_url. Uses form data instead of JSON body.""" + data = { "bucket": bucket } + files = { "image": image_file } + response = requests.post(IMAGE_UPLOAD_URL + "upload/", files=files, data=data) if response.status_code != 201: return user = User.objects.get(id=user_id) @@ -18,6 +16,7 @@ def upload_profile_pic(user_id, profile_pic_base64): # if there is already a profile picture, delete old one to free up space on server if person.profile_pic_url: remove_profile_pic(user_id) + print(f"Upload Profile Pic: {response.json()}") person.profile_pic_url = response.json().get("data") user.save() person.save() diff --git a/src/person/views.py b/src/person/views.py index 202ffda..c261178 100644 --- a/src/person/views.py +++ b/src/person/views.py @@ -76,12 +76,10 @@ def get(self, request): def post(self, request): """Update current authenticated user.""" - try: - data = json.loads(request.body) - except json.JSONDecodeError: - data = request.data + data = request.POST + profile_pic = request.FILES.get("image") return UpdatePersonController( - request.user, data, self.serializer_class + request.user, data, profile_pic, self.serializer_class ).process() def delete(self, request): diff --git a/src/rideshare/settings.py b/src/rideshare/settings.py index cf57c50..dbcc38c 100644 --- a/src/rideshare/settings.py +++ b/src/rideshare/settings.py @@ -154,3 +154,5 @@ # https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" + +FILE_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 15