📝이미지와 텍스트를 포스팅하는 API만들기
우선 포스트맨을 포스트로 셋팅하고 Body에 form-data로
키값을 사진을 올릴 수 있는 파일 타입, 글을 올릴 수 있는 텍스트타입으로 하나씩 만들어줬다
Visual Studio Code를 실행해 코드를 작성해준다
사진을 S3에 업로드하고 업로드한 사진의 Url을 가져와 입력한 내용과 함께 DB에 저장해줬다
class PostingResource(Resource) :
def post(slef) :
# 1. 클라이언트로부터 데이터를 받아온다
# from=data
# photo : file
# content : text
# 사진과 내용은 필수항목이다 세이프코딩
if 'photo' not in request.files or 'content' not in request.form :
return {'error' : '데이터를 정확히 보내세요'}, 400
file = request.files['photo']
content = request.form['content']
# 2. 사진을 먼저 S3에 저장한다
current_time = datetime.now()
# 콜론은 파일명에 들어갈 수 없음으로 바꿔준다(확장자 명은 올린 파일로)
new_file_name = current_time.isoformat().replace(':', '_') + '.' + file.content_type.split('/')[-1]
# 파일명을 유니크한 이름으로 변경한다 (클라이언트에서 보낸 파일명을 대체)
file.filename = new_file_name
# boto3 라이브러리를 이용해서 S3에 파일을 업로드 한다
client = boto3.client('s3', aws_access_key_id= Config.ACCESS_KEY, aws_secret_access_key= Config.SECRET_ACCESS)
try :
client.upload_fileobj(file, Config.S3_BUCKET, new_file_name, ExtraArgs= {'ACL' : 'public-read', 'ContentType' : file.content_type})
except Exception as e :
return {"error" : str(e)}, 500
# 3. 저장된 사진의 imgUrl을 만든다
imgUrl = Config.S3_LOCATION + new_file_name
# 4. DB에 저장한다
try :
connection = get_connection()
query = '''insert into
posting(content, imgUrl)
values (%s, %s);'''
record = (content, imgUrl)
cursor = connection.cursor()
cursor.execute(query, record)
connection.commit()
cursor.close()
connection.close()
except Error as e :
print(e)
cursor.close()
connection.close()
return {"error" : str(e)}, 500
return {"result" : "success"}, 200
+ 파일을 업로드할때 이미지가 아닌 파일을 업로드하는 것을 방지하기 위해 세이프코딩 추가
S3에 저장하기 전에 입력해준다
if 'image' not in file.content_type :
return {'error' : '이미지 파일이 아닙니다.'}
+ {"message":"Request Entity Too Large"} 413 에러 발생
요청이 들어오면 API게이트웨이가 람다를 실행해주는데 파일크기가 너무 커서 막아버린 것
그럴때는 API게이트웨이를 수정해준다
'Restful API' 카테고리의 다른 글
[Restful API] 서버 개발 총 정리 (0) | 2023.01.16 |
---|---|
[Restful API] 네이버 Open API 사용해보기 (0) | 2023.01.13 |
[Restful API] S3에 저장한 이미지를 객체 탐지하는 API만들기(Rekognition) (0) | 2023.01.12 |
[Restful API] 이미지 S3에 업로드하는 API 만들기 (0) | 2023.01.12 |
[Restful API] Query String 검색하는 API 만들기 (0) | 2023.01.10 |
댓글