Хорошо, я предполагаю, что у вас есть действительный файл .avro
, в соответствии с примером в документах fastavro.
Это становится простым случаем обработки этого как стандартная загрузка файлов на Flask. Поэтому вместо того, чтобы брать данные из request.data
, вы можете сделать что-то вроде:
from fastavro import reader
from flask import Flask, request
app = Flask(__name__)
# This is really basic and could use some validation
@app.route('/invocations', methods=['POST'])
def upload():
if request.method == 'POST':
file = request.files['file']
for record in reader(file):
print (record)
return 'uploaded'
Затем вы можете отправить свой файл в конечную точку с помощью curl:
curl -i -X POST -F 'file=@out.avro' "http://localhost:5000/invocations" -H 'ContentType: multipart/form-data'
Это должно привести к что-то на консоли сервера, например:
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
{'station': '011990-99999', 'time': 1433269388, 'temp': 0}
{'station': '011990-99999', 'time': 1433270389, 'temp': 22}
Если вы хотите sh отправить с использованием библиотеки запросов, вы можете сделать что-то вроде этого:
import requests
def upload(filename):
headers={'ContentType': 'multipart/form-data'}
with open(filename,'rb') as f:
files = {'file': f}
url='http://localhost:5000/invocations'
r = requests.post(url, files=files)
print (r.content, r.status_code)
upload('out.avro')