補助項目:整理(5)


画像やファイルをアップロードするときにdjangoのストレージスペースを使用する場合がありますが、容量が大量に必要なため、これは適切ではありません.逆に、アマゾンが提供するs 3サービスを使用する場合は、保存時のurlのみをデータベースに保存し、必要に応じてロードすることができます.
S 3サービスのプリファレンスは、以下のとおりである.
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/
基本的な設定を完了するには、を使用します.異なる時点に応じて異なるs 3を設定する必要がある場合があります.
設定が完了したら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)
アップロードするファイルの種類や処理によっては、コードが異なる場合があります.