Upload Image using POST form data in Python-requests

前端 未结 7 1815
醉话见心
醉话见心 2020-11-27 04:16

I\'m working with wechat APIs ... here I\'ve to upload an image to wechat\'s server using this API http://admin.wechat.com/wiki/index.php?title=Transferring_Multimedia_Files

7条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-11-27 04:31

    In case if you were to pass the image as part of JSON along with other attributes, you can use the below snippet.
    client.py

    import base64
    import json                    
    
    import requests
    
    api = 'http://localhost:8080/test'
    image_file = 'sample_image.png'
    
    with open(image_file, "rb") as f:
        im_bytes = f.read()        
    im_b64 = base64.b64encode(im_bytes).decode("utf8")
    
    headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
      
    payload = json.dumps({"image": im_b64, "other_key": "value"})
    response = requests.post(api, data=payload, headers=headers)
    try:
        data = response.json()     
        print(data)                
    except requests.exceptions.RequestException:
        print(response.text)
    

    server.py

    import io
    import json                    
    import base64                  
    import logging             
    import numpy as np
    from PIL import Image
    
    from flask import Flask, request, jsonify, abort
    
    app = Flask(__name__)          
    app.logger.setLevel(logging.DEBUG)
      
      
    @app.route("/test", methods=['POST'])
    def test_method():         
        # print(request.json)      
        if not request.json or 'image' not in request.json: 
            abort(400)
                 
        # get the base64 encoded string
        im_b64 = request.json['image']
    
        # convert it into bytes  
        img_bytes = base64.b64decode(im_b64.encode('utf-8'))
    
        # convert bytes data to PIL Image object
        img = Image.open(io.BytesIO(img_bytes))
    
        # PIL image object to numpy array
        img_arr = np.asarray(img)      
        print('img shape', img_arr.shape)
    
        # process your img_arr here    
        
        # access other keys of json
        # print(request.json['other_key'])
    
        result_dict = {'output': 'output_key'}
        return result_dict
      
      
    def run_server_api():
        app.run(host='0.0.0.0', port=8080)
      
      
    if __name__ == "__main__":     
        run_server_api()
    

提交回复
热议问题