2차 프로젝트: 중간 정리 (5)
이미지나 파일 등을 업로드 할 때, django의 저장공간을 이용할 수도 있지만, 이는 용량을 많이 요구하기 때문에 적절하지 않을 수 있다. 대신 아마존에서 제공하는 s3 서비스를 이용할 경우, 저장할 때의 url만 데이터베이스에 저장하고 필요할 때 불러올 수 있다.
S3서비스를 이용하기 위한 기본 설정은
https://ssungkang.tistory.com/entry/Django-AWS-S3%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%97%85%EB%A1%9C%EB%93%9C
과
https://www.enteroa.com/2020/11/05/s3-%EB%B2%84%ED%82%B7-cors-%EC%84%A4%EC%A0%95-json/
를 이용하면 기본적인 세팅을 마칠 수 있다. 시점에 따라 s3 설정을 다르게 해야할 수는 있다.
설정을 마쳤다면, view를 작성할 필요가 있다. 파일의 경우, 다음과 같이 구현할 수 있다.
class ResumeFilewUploadView(View):
@login_decorator
def post(self, request):
user = request.user
if request.FILES.__len__() == 0:#요청에 파일이 제대로 담겨왔는지 검사
return JsonResponse({"message": "FILE_DOES_NOT_EXIST"}, status=400)
file = request.FILES['resume']#키값을 임의로 지정해 줄 수 있다.
if file.name.find('pdf') < 0:#pdf파일만을 업로드 받기 위해 작성. 필요시 생략해도 된다.
return JsonResponse({"message": "PLEASE_UPLOAD_PDF"}, status=400)
s3_client = boto3.client(#boto3로 s3에 요청을 보낼시 필요한 값들
's3',
aws_access_key_id = S3KEY,
aws_secret_access_key = S3SECRETKEY
)
url_generator = str(uuid.uuid4())
s3_client.upload_fileobj(#파일을 업로드 하는 명령어
file, #업로드 하려는 파일파일
"wantusfile",#버킷의 이름
url_generator,#객체의 이름. url에 말미에 붙어 저장된다.
ExtraArgs = {
"ContentType": file.content_type,#타입을 지정해주는 명령어
}
)
file_url = f"https://wantusfile.s3.ap-northeast-2.amazonaws.com/{url_generator}"
resume = ResumeFile.objects.create(user=user, title=file.name, file_url=file_url, uuidcode=url_generator)
return JsonResponse({'message': 'SUCCESS', 'data': file_url}, status=200)
업로드 하고자 하는 파일의 종류와 처치에 따라 코드는 달라질 수 있다.
Author And Source
이 문제에 관하여(2차 프로젝트: 중간 정리 (5)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@signet/2차-프로젝트-중간-정리-5저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)