개발/백엔드
server - AWS S3 에 이미지 업로드 하기.
웅'jk
2023. 1. 12. 16:04
S3 에 업로드하기위해서 새로운 버킷을 생성합니다.
버킷을 생성하실때 ACL 활성화 선택해주세요.
엑세스 차단을 풀어 퍼블릭상태가 될 수 있도록 합니다.
버킷을 다 생성하셨으면 비쥬얼 코드를 실행해서 코드를 작성합니다.
1. boto3 라이브러리 설치.
- S3 에 업로드하기 위해 boto3 라이브러리를 설치합니다.
pip install boto3
2. 클라이언트로부터는 form-data 형식으로 이미지를 전달받도록 합니다.
3. AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY를 준비하여 config.py에 추가합니다.
config.py
# AWS 관련키
AWS_ACCESS_KEY_ID = 키값
AWS_SECERT_ACCESS_KEY = 키값
4. 이미지 파일은 request.files['파라미터명'] 으로 가져오며 저장시 이름은 시간날짜정보로 저장합니다.
# 이미지를 받아온 키 값은 photo
if 'photo' not in request.files :
return {'error':'파일업로드하세요'},400
file = request.files['photo']
# 이미지가 jpg 인 경우
current_time = datetime.now()
new_file_name=current_time.isoformat().replace(':','_')+'.jpg'
# 파일 이름 변경
file.filename = new_file_name
5. 파일을 업로드하기 위해 버킷명과 버킷 주소를 config 에 추가
# config.py
#S3 버킷
S3_BUCKET = '버킷명'
#S3 위치
S3_LOCATION = '버킷주소'
6. boto3 기본 설정을 변수 client로 저장
client = boto3.client('s3',aws_access_key_id = Config.AWS_ACCESS_KEY_ID,
aws_secret_access_key = Config.AWS_SECERT_ACCESS_KEY)
7. upload_fileobj 함수를 이용해 업로드
client.upload_fileobj(
file, # 받아온 이미지파일
Config.S3_BUCKET, # 버킷명
new_file_name, # 이미지 저장할 이름
ExtraArgs={'ACL':'public-read', 'ContentType':file.content_type }
# 추가로 넘겨줄 값으로 ACL 을 활성화 했기에 어떤 접근을 허용할지 선택
# 지금은 모든 유저의 읽기을 허용
# contenttype 은 파일이 어떤 타입인지를 전달
)