정리

18 TIL 정리 (s3업로드,url가져오기)

모_아이 2022. 5. 13. 00:24

S3 버킷을 파이썬에서 boto3

EB를 이용해 백엔드로 서버를 일단 움직여보려 했으나 아직 실력이 부족해 EC2를 이용해 서버를 운용했다.

그 과정에서 유저들의 데이터를 S3로 받았고 파이썬 boto3를 이용해 코드를 구상했다.

일단 소스 내에서 키를 받게 했는데 후엔 보안상의 문제로 깃이나 EB에서 시크릿 키로 전환 할 생각이다.

s3 = boto3.client('s3',
                      aws_access_key_id=AWS_ACCESS_KEY_ID,
                      aws_secret_access_key=AWS_SECRET_ACCESS_KEY
                      )

여기서 =aws_부분은 각자 가지고 잇는 키 아이디와 시크릿 키를 넣으면 된다.

이후 POST된 파일을 request.files로 받아온 후 파일 저장을 하면 된다.

#파일 값 받아오기
file = request.files['file_give']
# s3 파일 저장
s3.put_object( #s3에 저장
    ACL="public-read", #권한은 퍼블릭 읽기
    Bucket=BUCKET_NAME, #버킷 이름 입력
    Body=file,#파일
    Key=name,#파일 명 ( 폴더로 넣으려면 '넣을곳/'+이름 식으로 하면 된다
    ContentType=file.content_type #메타 데이터 설정 ex)image/jpeg

이후 쉽게 이미지를 다시 불러오기 위해 방금 S3에 저장된 값의 url을 불러온다

# s3 url 불러오기
            location = s3.get_bucket_location(Bucket=BUCKET_NAME)['LocationConstraint']
            image_url = f'https://{BUCKET_NAME}.s3.{location}.amazonaws.com/{name}'

먼저 location  정보를 가져오는데 location은 AWS가 전세계에서 데이터 센터를 클러스터링 하는 물리적 위치(리전)

처음 S3서비스를 이용할 때 정한 리전 정보를 가져오자

그 다음 버킷이름.s3.로케이션.amazoneaws.com/파일경로 순으로 작성하면 s3를 들어가서 확인하지 않고도 파일URL만 따로 빼서 사용할 수 있다.

반응형