지난 글에서 버킷을 생성했으니 이제 장고와 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을 사용하여 여러개의 파일을 한 번에 전달받을 때 애러를 해결하느라 오랜 시간이 걸렸었다.
시간이 오래 걸린 이유는 아래와 같다.
1. body의 형식이 하나만 있어야 한다는 것을 잘 몰랐음
request.POST.get['키']
requset.POST.getlist['키'] #파일 여러개를 받아올 때,
그리고 나는 한 리뷰에 엮인 여러장의 파일을 리스트 형식으로 받아와야 해서
getlist를 사용했다. 다들 고생하지 마시길...!