class ClassComment(View):
s3_client = boto3.client(
's3',
aws_access_key_id = AWS_ID,
aws_secret_access_key = AWS_KEY
)
#@auth_decorator
def post(self, request):
try:
if request.FILES:
file = request.FILES['photo']
uid = uuid.uuid4()
save_name = str(uid)
self.s3_client.upload_fileobj(
file,
"we101",
save_name,
ExtraArgs={
"ContentType": file.content_type
}
)
Comment(
comment = request.POST['comment'],
user_id = request.POST['user_id'],
content_id = request.POST['content_id'],
photo = f'https://we101.s3.ap-northeast-2.amazonaws.com/{save_name}'
).save()
else:
Comment(
comment = request.POST['comment'],
user_id = request.POST['user_id'],
content_id = request.POST['content_id'],
).save()
return JsonResponse({'message':'Added'}, status=200)
except KeyError:
return JsonResponse({'message':'KEY_ERROR'}, status=400)
댓글기능을 구현하면서 단순히 텍스트만 받을 때와 사진이나 영상을 받을 때가 완전 다름을 알게 되었고 그 기능을 구현하는데 많은 에너지를 쏟았다. 결과적으로 동기의 조언을 바탕으로 S3에 저장하고 혹여나 있을 한글 제목등을 고려해 임의의 값(UUID)로 저장하여 문제가 없도록 하였다. 로컬 환경이 아닌 S3를 이용하여 데이터의 안정성도 지키고 추후 여러가지 기능 구현에 사용할 수 있을 것이다.