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
url = 'http://file.api.wechat.com/cgi-bin/media/upload?access_token=%s&type=image'%access_token files = { 'file': (filename, open(filepath, 'rb')), 'Content-Type': 'image/jpeg', 'Content-Length': l } r = requests.post(url, files=files)
I'm not able to post data
Option 1: Direct File Upload , From this method you can select form-data and set the type to file. Then select an image file by clicking on the button shown in the value column. The content type is automatically detect by postman but if you want you can set it with a relevant MIME type.
Send the image with requests. post(url, files={'image': open('image. jpg', 'rb')}) , see https://requests.readthedocs.io/en/master/user/quickstart/#post-a-multipart-encoded-file. Receive the image with file = request.
From wechat api doc:
curl -F [email protected] "http://file.api.wechat.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE"
Translate the command above to python:
import requests url = 'http://file.api.wechat.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE' files = {'media': open('test.jpg', 'rb')} requests.post(url, files=files)
Doc: https://docs.python-requests.org/en/master/user/quickstart/#post-a-multipart-encoded-file
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()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With