먼저 AWS에서 S3의 버킷을 먼저 만들어준다.
상황에 맞게 설정하여 버킷을 만든다.
(IAM으로 만든 허용된 access 키를 가지고 있으면 접근할 수 있어야하므로 ACL활성화시켜서 진행하였음. )
다음 코드를 작성하기 전에 포스트맨에서 request를 먼저 만들었다.
파일을 올려두고 API가 실행되면 S3에 업로드되도록 코드를 작성해보자.
제일 먼저 config 파일에서 코드 작성이 용이하도록 먼저 변수처리를 해주자.
pip install boto3
그 다음은 Python 에서 S3로 파일을 업로드해주는 라이브러리인 boto를 설치하고 import 해준다.
실행 파일에 리소스와 경로를 작성한다.
연결된 리소스 클래스의 코드는 다음과 같다.
class FileUploadResource(Resource):
def post(self):
# 1. 클라이언트로부터 데이터를 받아온다.
# request.files 에 파일을 받아온다.
# 따라서 파일이 없는 상태로 API가 호출되면, 에러메세지를 클라이언트에 응답해주자.
# photo 란?, 클라이언트에서 보내는 key
if 'photo' not in request.files:
return{'error' : '파일을 업로드 하세요.'}, 400
# 클라이언트로부터 파일을 받아온다.
file = request.files['photo']
# 파일명을 유니크하게 변경해준다.
current_time = datetime.now()
new_file_name = current_time.isoformat().replace(":", "_") + '.png'
# 유저가 올린 파일의 이름을. 내가 만든 파일명으로 변경.
file.filename = new_file_name
# S3에 업로드하기
# AWS의 라이브러리를 사용해야한다.
# 그 파이썬 라이브러리는 boto3 이다.
# pip install boto3
# S3 연결
s3 = boto3.client('s3',
aws_access_key_id= Config.ACCESS_KEY,
aws_secret_access_key= Config.SECRET_ACCESS_KEY)
# S3에 업로드
try:
s3.upload_fileobj(file,
Config.S3_BUCKET,
file.filename,
ExtraArgs= {'ACL':'public-read', 'ContentType':file.content_type} )
except Exception as e:
{'error': str(e)}, 500
return {'result':'success',
'ImgUrl': Config.S3_LOCATION + file.filename}
위 코드를 작성한 뒤 로컬에서 테스트한 모습이다.
'AWS' 카테고리의 다른 글
AWS Lambda 서버 주소 확인하기 (0) | 2022.09.21 |
---|---|
AWS S3에 boto3로 Rekognition 사용하기 (0) | 2022.06.24 |
용량 큰 파일을 Github 통하지 않고 바로 EC2서버로 업로드하기 - FTP 이용하기 (0) | 2022.05.27 |
AWS EC2 서버에 Streamlit 개발환경 구성하기 (2) - git 설치 / Github 의 repository 연동하기 (0) | 2022.05.23 |
AWS EC2 서버에 Streamlit 개발환경 구성하기 (1) - Anaconda 설치 / 라이브러리 설치 (0) | 2022.05.23 |
댓글