AWS EC2에 이미지를 전송하기 위해 flask 서버를 이용하기로 했다.
from flask import Flask, render_template, request
from werkzeug.utils import secure_filename
app = Flask(__name__)
# 파일 업로드 처리
@app.route('/fileUpload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
return 'uploads'
if __name__ == '__main__':
# 서버 실행
app.run(host="0.0.0.0", port=8080)
우선 이미지를 받을 수 있는 서버를 만들어 주었다.
-코드-
이미지를 전송하는 로컬에서 다음과 같이 request로 저장되어 있는 파일과 날짜 데이터를 보내려 한다.
@app.route('/fileUpload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
f = request.files['file'] #파일 받기
d = request.data #데이터 받기
print(type(d))
print(f)
date=d['date']
time=d['time']
# 저장할 경로 + 파일명
f.save("./static/"+secure_filename(f.filename))
return 'uploads'
받는 서버에서 파일명과 데이터를 받기 위해 request.files와 data로 받았다.
전송에서 데이터를 딕셔너리 형태로 보냈는데 데이터 타입이 잘못되었다고 에러가 뜬다.
넘어오는 값을 확인해보니 d''라고 뜬다 데이터가 넘어오지 않았다.
@app.route('/fileUpload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
f = request.files['file']
d = request.form
#f=f.split('.jpg')
date=d['date']
time=d['time']
todo_list_dao.insertimg(f.filename.split(".")[0], date, time)
# 저장할 경로 + 파일명
f.save("./static/"+secure_filename(f.filename))
return 'uploads'
data를 request로 받을 때 request.data가 아닌 request.form으로 받아야 한다.
파일명이 확장자를 포함하고 있어서 split으로 '.' 이후의 텍스트를 잘라냈다.
def insertimg(iname, idate, itime):
conn = connection.get_connection()
sql = '''
insert into image(iname, idate, itime) values("{}", "{}", "{}")
'''
print(sql)
cursor = conn.cursor()
ret = cursor.execute(sql.format(iname, idate, itime))
기존에 만들었던 dao의 insertimg 메서드로 이미지에 관련된 정보를 입력해주었다.
-이미지-
제대로 데이터가 전송된 것을 확인할 수 있다.
해당 날짜를 클릭하면 저장된 이미지가 제대로 뜨는 것을 확인할 수 있다.
'Machin-Learning Project' 카테고리의 다른 글
Mysql 계정 생성 및 권한 부여 (0) | 2020.11.14 |
---|---|
DB 비밀번호 암호화 (0) | 2020.11.11 |
flask 서버 백그라운드 실행 (0) | 2020.11.10 |
보안된 포트 변경하기 (0) | 2020.11.07 |
서버 구축 (0) | 2020.11.03 |