티스토리 뷰

728x90

<목차>

    1. 패키지 설치

    requests 라이브러리를 설치한다. 

    - 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

     

    728x90
    댓글
    공지사항
    최근에 올라온 글