AWS S3, boto3에 대해서

Nicholas·2022년 6월 12일
0

Django

목록 보기
13/14

s3에 이미지를 저장하는 과정을 순서대로 정리

s3의 전체적인 플로우

  1. aws s3의 저장소(버킷)을 만든다.
  2. form-date형식으로 들어온 파일을 s3에 저장한다
  3. 저장한 파일의 url을 DB에 저장한다.

아주 간단(?)하다

천천히 살펴보자

1. aws s3의 저장소(버킷)을 만드는법

  • 버킷만드는 과정은 유튜브의 5분경부터 천천히 들으면서 따라해보자

2. AWS S3 와 연결하기

$ aws configure
AWS Access Key ID [None]:
AWS Secret Access Key ID [None]: 
Default region name [None]:
Default output format [None]:

3. s3에 파일을 저장하는법

  • 전체코드
	class fileUpload(View):
    	@login_decorator
      	def post(self, request):
          file = request.FILES.get("image")

          s3 = boto3.resource(
              "s3",
              aws_access_key_id     = settings.AWS_ACCESS_KEY_ID,
              aws_secret_access_key = settings.AWS_SECRET_ACCESS_KEY
          )

          file._set_name(str(uuid.uuid4()))

          s3.Bucket(settings.AWS_STORAGE_BUCKET_NAME).put_object(
              Key         = "%s" %(file),
              Body        = file,
              ContentType = "image"
          )
  • form-data형식으로 들어온 파일중 key값이 image인 파일을 file변수에 담는다.
    file = request.FILES.get("image")
  • boto3 패키지를 이용해 s3 접근
    ```
    s3 = boto3.resource(
              "s3",
              aws_access_key_id     = settings.AWS_ACCESS_KEY_ID,
              aws_secret_access_key = settings.AWS_SECRET_ACCESS_KEY
          )
     ```
    boto3 ducument에서 대표적인 접근방식 메소드는 client, resource이다.
    client: low-level인터페이스이며, AWS API와 1:1 매핑이되며, 메소드가 스네이크 케이스로 정의
    resource : high-level, 객체지향적 인터페이스, idenifier와 attribute를 사용하고, 자원에 대한 조작위주에 사용됨
  • uuid 패키지 사용
    사용 이유 : 파일명이 한글과 같은 aws에 저장하기어려운 파일명을 랜덤하게 유니크한 글자로 변환해주는 패키지
    file._set_name(str(uuid.uuid4()))
  • s3.Bucket(settings.AWS_STORAGE_BUCKET_NAME)
    버킷에 접근하는 메소드
  • put_object 접근한 버킷에 저장하는 방법에 대한 메소드 공식문서에서 여러방법들이 나와있다.

form-data파일을 받고 boto3로 접근한뒤에 파일명을 uuid로 랜덤하게 바꾼뒤에 접근한 aws의 bucket에 put_object로 key(파일명), body(파일자체)를 저장한다.

3. 저장한 파일 가져다쓰는법

profile
WEB Developer

0개의 댓글