Проблема:
Я хочу отправить файл с -F
вариант и наряду с данными JSON с -d
к маршруту колбы. Но только я могу реализовать.
Код я пробовал.
curl -X POST -H «Content-Type: application / json» -d ‘{«username»: «xyz», «password»: «xyz»}’ http://192.168.150.113/test
Код Колбы:
@app.route('/test',methods = ['GET', 'POST'])
def test():
if request.method == 'POST':
data = request.data
data = json.loads(data)
return 'success'
Только с файлом:
curl -X POST -F [email protected] http://192.168.150.113/test
@app.route('/process' , methods = ['GET', 'POST'])
def process():
if request.method == 'POST':
f = request.files['file']
if f:
try:
filename = secure_filename(f.filename)
f.save( os.path.join(app.config['UPLOAD_FOLDER'], filename ))
return 'success'
Но без отправки отдельного запроса я хочу объединить эти два запроса POST и обработать их с помощью колбы.
Есть ли способ, которым я могу сделать это?
Используйте опцию -F для отправки данных с multipart/form-data
curl -X POST -H "Content-Type: multipart/form-data" -F "[email protected]" -F "username=xyz" -F "password=xyz" http://localhost:5000/test
Вы не можете отправить файл с JSON вместе, так как они имеют разные Content-Type
, Кроме того, вы можете записать свой JSON и отправить их с multipart/form-data
, Например, вы можете отправить form
как следующее:
curl -X POST -H "Content-Type: multipart/form-data" -F "[email protected]" -F "json_data='{\"username\":\"xyz\",\"password\":\"xyz\"}'" http://localhost:5000/test
И в Python, вы можете получить этот JSON request.form.get("json_data")
, Это более надежно, чем передача пар ключ-значение через обычный multipart/form-data
поскольку это поддерживает намного более сложную структуру.