개발/백엔드

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 은 파일이 어떤 타입인지를 전달
)