[S3]boto3를 사용한 파일 업로드와 파일 다운로드
AWS S3
Amazon Simple Storage Service는 인터넷용 스토리지 서비스입니다.
버킷(Bucket)
객체들이 모여있는 컨테이너를 버킷(Bucket)이라 부르며 가장 높은 수준의 네임스페이스 역할을 한다. 버킷은 액세스 제어나 사용량 보고에 대한 집계 단위 등 여러 목적으로 사용할 수 있다.
객체(Object)
데이터가 저장되는 단위를 객체라고 부르고, 객체는 데이터와 키, 메타데이터로 구성된다.
객체 키는 버킷 내 객체를 고유하게 식별한다.
객체 키(Object Key)
객체를 만들 때 버킷 내 각 객체의 고유한 식별자로 키 이름을 지정합니다.
Amazon S3 데이터 모델은 단조로운 구조를 가지고 있습니다. 하위 버킷 또는 하위 폴더의 계층 구조는 없습니다.
그러나 Amazon S3 콘솔과 같이 키 이름 접두사 및 구분 기호를 사용하여 논리적인 계층 구조를 유추할 수 있습니다.
콘솔은 구분 기호('/')를 사용하여 폴더 구조를 표현합니다.
test.jpg 파일이 image 폴더 안에 들어가 있다면 test.jpg 파일의 키는 image/test.jpg이다
File Upload
file_name = 업로드할 파일, 상대 경로는 실행하는 코드를 기준으로 한다
bucket = 업로드될 버킷의 이름을 지정한다
key = 업로드되어 버킷 내에서 해당 파일이 가질 키를 지정한다, image/test.jpg 라고 하면 버킷의 image폴더 안에 test.jpg라는 파일명으로 저장된다.
import boto3
file_name = 'image/atv_rider0001.jpg'
bucket = 'flxr-yolo'
key = 'image/test.jpg'
# Upload the file
s3 = boto3.client('s3')
res = s3.upload_file(file_name, bucket, key)
File Download
file_name = Download한 파일이 저장될 위치를 지정한다, 상대 경로는 실행하는 코드를 기준으로 한다
bucket = 다운로드 할 버킷의 이름을 지정한다
key = 다운로드 할 객체를 지정한다, image폴더 안에 atv_rider0001.jpg라는 파일을 가져온다
import boto3
file_name = 'image/atv_rider0001.jpg'
bucket = 'flxr-yolo'
key = 'image/atv_rider0001.jpg'
# Download the file
client = boto3.client('s3')
client.download_file(bucket, key, file_name)
Ref
1. https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/dev/Welcome.html
2. https://planbs.tistory.com/entry/S3%EC%97%90-%EC%A0%91%EA%B7%BC%ED%95%98%EA%B8%B0
3. https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/dev/UsingMetadata.html#object-metadata