반응형
< boto3 로 S3에 파일 업로드 하기 >
# Boto3 란??
- Boto3는 Python 프로그래밍 언어를 위한 AWS SDK(Software Development Kit)
- Boto3를 사용하면 Python 애플리케이션에서 Amazon Web Services(AWS)의 다양한 서비스와 쉽게 상호 작용할 수 있다.
- Boto3는 AWS의 API를 Python 코드로 쉽게 호출할 수 있도록 해주는 라이브러리로, S3, EC2, DynamoDB, Rekognition 등 다양한 AWS 서비스와 연동할 수 있다.
# 그럼 이제 코드로 사용해보자! 우선 이미지를 업로드할 버킷을 생성하여야 한다.
- 참고 : https://sorktjrrb.tistory.com/157
# 이제 Postman을 실행시켜 API 설계 및 리퀘스트 생성
- POST로 생성
- 중요한점! Body에 form-data로 설정후, 업로드할 사진파일은 File로 올리고, 설명문은 Text 형식으로 작성
# Visual Studio Code를 실행해서 코드 작성!
- 서버 배포에 필요한 파일들은 이전 프로젝트에서 복사하였고, app.py와 resources 파일만 새로 작성!
# image.py 파일
- boto3 install도 필요하다!
# S3에 파일을 업로드한다.
# aws의 서비스들을 파이썬코드로 작성할수 있는
# boto3 라이브러리를 이용해서 코드를 작성한다.
pip install boto3
from flask import request
from flask_restful import Resource
from datetime import datetime
import boto3
from config import Config
class FileUploadResource(Resource) :
def post(self):
# 1. 클라이언트로부터 데이터를 받아온다.
# 파일은 request.files 안에 있고,
# 텍스트는 request.form 안에 있다.
if 'photo' not in request.files :
return {'result' : 'fail' ,
'error' : '파일을 업로드 하세요.'}, 400
if 'content' not in request.form :
return {'result' : 'fail' ,
'error' : '내용을 작성하세요.'}, 400
file = request.files['photo']
# 파일 형식이 맞는지 검토가 필요하다.
if 'image' not in file.content_type :
return {'result' : 'fail',
'error' : '이미지 파일만 업로드 가능합니다.'}, 400
print(file)
content = request.form['content']
print(content)
# 파일을 S3에 업로드해야 하는데,
# 먼저, 파일명은 유니크 해야 한다.
# 따라서 유니크한 파일명으로 바꿔서 업로드 한다.
# 현재시간과 유저아이디 등을 조합해서 만든다.
current_time = datetime.now()
# 윈도우에선 : 을 파일로 생성하지 못하기 때문에 저장을 위해서 isoformat을 진행하고 : 을 _로 바꿔준다.
# 유저가 올린 파일 확장자명을 그대로 쓰고 싶으면, file.content_type.split('/') or .jpg 이렇게 구문만 적어서 정해줄수도 있다.
file_name = current_time.isoformat().replace(':','_') + '.' + file.content_type.split('/')[-1]
print(file_name)
# 유저가 업로드한 파일명을, 내가 만든파일명으로 바꾼다.
file.filename = file_name
# S3에 파일을 업로드한다.
# aws의 서비스들을 파이썬코드로 작성할수 있는
# boto3 라이브러리를 이용해서 코드를 작성한다.
# 설치는 $ pip install boto3
client = boto3.client('s3',
aws_access_key_id = Config.AWS_ACCESS_KEY,
aws_secret_access_key = Config.AWS_SECRET_ACCESS_KEY)
try :
client.upload_fileobj(file,
Config.S3_BUCKET,
file_name,
ExtraArgs = {'ACL' : 'public-read',
'ContentType' : file.content_type})
print('upload_fileobj')
except Exception as e :
return {'result' : 'fail',
'error' : str(e)}, 500
return {'result' : 'success',
'url' : Config.S3_URL + file_name}
# app.py 파일에 연결 경로 작성
from flask import Flask
from flask_restful import Api
from resources.image import FileUploadResource
from resources.rekognition import ObjectDetectionResource
app = Flask(__name__)
api = Api(app)
# 경로와 리소스를 연결하는 코드 작성
api.add_resource( FileUploadResource , '/upload')
api.add_resource( ObjectDetectionResource , '/object_detection')
if __name__ == '__main__':
app.run()
# Postman 실행시켜서 업로드 확인!
# 이제 이 업로드한 파일은 생성하였던 AWS S3에 버킷에서도 확인 가능!
- 버킷 리스트에서 업로드한 버킷을 선택하여서 객체 진입후 새로고침을 하면 업로드된 파일 확인 가능
다음 게시글로 계속~!
728x90
반응형
'API 개발 > AWS S3 & Rekognition API 파일 업로드' 카테고리의 다른 글
AWS rekognition : AWS rekognition 활용한 얼굴 비교 API (0) | 2024.06.25 |
---|---|
AWS rekognition : AWS rekognition 활용한 얼굴 인식 API (0) | 2024.06.25 |
Restful API : AWS boto3 로 Rekognition 사용하여 객체 감지(Object Detection) 하기 (0) | 2024.05.31 |
AWS S3 : S3 스토리지 사용 방법 (버킷 생성) (0) | 2024.05.28 |