티스토리 뷰
[Python/Flask] HTTP POST 방식으로 파일 전송 (feat. requests, Flask.request)
ellie.strong 2021. 7. 14. 22:57<목차>
1. 패키지 설치
requests 라이브러리를 설치한다.
pip install requests
2. files 형태로 파일 전송
이미지 파일을 전송해보자!!
client
import requests
files = open('blackpink.png', 'rb')
upload = {'file': files}
res = requests.post(' http://127.0.0.1:5000/image/', files = upload)
server
from flask import Blueprint, request
from werkzeug.utils import secure_filename
bp = Blueprint('image', __name__, url_prefix='/image')
# HTTP POST방식으로 전송된 이미지를 저장
@bp.route('/', methods=['POST'])
def save_image():
f = request.files['file']
f.save('./save_image/' + secure_filename(f.filename))
return 'done!'
① 클라이언트에서 requests.post() 실행 시 서버에 다음과 같이 HTTP request가 들어온다.
② 그러면 /image 와 연결된 route함수가 동작하여 우리가 만들어 높은 save_image() 함수가 실행돼 전송된 이미지를 설정한 경로에 저장한다.
텍스트 파일의 경우에도 잘 적용된다.
files = open('blackpink_data.txt', 'rb')
3. files, data 형태로 파일 전송
이미지 파일, 텍스트 파일, 스트링 데이터를 한번에 전송해보자!!
client
import requests
image = open('rose.png', 'rb')
text = open('rose_data.txt', 'rb')
files = {
'image': image,
'text': text
}
data = {
"student_id": "19970327",
"testroom_id": "1"
}
res = requests.post(' http://127.0.0.1:5000/image/', files=files, data=data)
server
from flask import Blueprint, request
from werkzeug.utils import secure_filename
bp = Blueprint('image', __name__, url_prefix='/image')
@bp.route('/', methods=['POST'])
def save_image():
image = request.files['image']
image.save('./save_image/' + secure_filename(image.filename))
text = request.files['text']
text.save('./save_image/' + secure_filename(text.filename))
student_id = request.form['student_id']
testroom_id = request.form['testroom_id']
print(student_id, testroom_id)
return 'done!'
① 클라이언트에서 requests.post() 실행 시 서버에 다음과 같이 HTTP request가 들어온다.
② 그러면 /image 와 연결된 route함수가 동작하여 우리가 만들어 높은 save_image() 함수가 실행 된다.
- data parameter의 경우 server에서 받아 올 때 request.form으로 받아와야한다.
- 학생 번호와 시험방 번호가 잘 출력되는 모습을 볼 수 있다.
- 한글 데이터도 잘 인코딩 된 모습을 볼 수 있다.
4. json 형태로 파일 전송
이미지 파일, 스트링 데이터를 json 형태로 전송해보자!!
ref.
- Python Request방식 파일, 데이터 전송 (tistory.com)
- [flask] 파일 받아와서 저장하기 - 1 (tistory.com)
- python - Get the data received in a Flask request - Stack Overflow
'Python' 카테고리의 다른 글
[Python/Flask] Socket으로 모니터 스크린 공유 (0) | 2021.07.15 |
---|---|
[Python/Flask] HTTP POST 방식으로 모니터 스크린 공유 (0) | 2021.07.15 |
[Python/Flask] 간단하게 웹 서버 만들기 (0) | 2021.06.29 |
[Python/Django] 간단하게 웹 서버 만들기 (0) | 2021.06.28 |
[Python] 여러 변수에 같은 값 할당하기 (0) | 2021.05.10 |