[AWS] s3에 파일 업로드 하기(2)

김은지·2022년 3월 21일
0

학습 내용 정리

목록 보기
13/25

지난 글에서 버킷을 생성했으니 이제 장고와 s3를 연결 할 순서!

import boto3

class FileView(View):

    s3_client = boto3.client(
        's3',
        aws_access_key_id="AKIASTLUR2MMQHRRSS6M", # 깃헙에 공유되지 않도로 숨김파일에 저장해두고 연결하여 쓰기를 추천한다. 
        aws_secret_access_key="OuAp9m9XoIN9FnjbwryQKJxzZS5ltNWsVdvhnKgO"
    )

    def post(self, request):
        file = request.FILES['filename']

        self.s3_client.upload_fileobj(
            file, 
            "s3-test",
            file.name, #주의: 같은 이름의 파일을 연속해서 올리면 업로드가 아닌 업데이트 된다. 
            ExtraArgs={
                "ContentType": file.content_type
            }
        ) 

        return HttpResponse(status= 200)

aws_access_key_id 와 aws_secret_access_key 값은 IAM user 생성후 다운 받았던 csv 파일에 나와있는데, github으로 프로젝트를 관리할 경우 노출되지 않도록 숨김파일에 저장해두고 쓰기를 추천한다.
또 이름이 같은 파일을 여러번 업로드 시도 할 경우 업로드가 되지 않고 업데이트 된다. 이 점을 해결하기 위해 'uuid'의 사용을 추천하는데, boto3처럼 import해서 사용해주면 된다.

추가! postman을 사용한 파일 전송 및 파일 받기!

프로젝트를 진행하면서 postman을 사용하여 여러개의 파일을 한 번에 전달받을 때 애러를 해결하느라 오랜 시간이 걸렸었다.
시간이 오래 걸린 이유는 아래와 같다.
1. body의 형식이 하나만 있어야 한다는 것을 잘 몰랐음

  • 보통 json 형식으로 바디를 전송하고, json.loads를 이용해 바디의 값을 사용하였는데, 파일은 form-data로 전송해야한다는 것을 알고 json과 form-data 이렇게 두 가지 형식으로 데이터를 전송하려고 했다.
    알고나니 간단한... 실수. 폼 데이터 하나만 사용한다!
  1. 폼 데이터 형식으로 보낸 데이터를 어떻게 가져와야 할지 몰랐다.
    계속 키에러가 발생해서 나중에 보니, 쿼리 파라미터를 받아올 때 처럼 받아오는데, POST를 사용했다.
request.POST.get['키']
requset.POST.getlist['키'] #파일 여러개를 받아올 때, 

그리고 나는 한 리뷰에 엮인 여러장의 파일을 리스트 형식으로 받아와야 해서
getlist를 사용했다. 다들 고생하지 마시길...!

0개의 댓글