问题:
我想将带有-F
选项的文件和带有-d
的json数据一起发送到烧瓶路径。但是我只能实现。
我试过的代码。
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 file=@sample.txt 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请求并使用flask来处理..
我有什么方法可以做到这一点吗?
答案 0 :(得分:1)
使用-F选项以multipart/form-data
curl -X POST -H "Content-Type: multipart/form-data" -F "file=@sample.txt" -F "username=xyz" -F "password=xyz" http://localhost:5000/test
答案 1 :(得分:1)
您无法一起发送带有json的文件,因为它们具有不同的Content-Type
。或者,您可以对json进行字符串化并使用multipart/form-data
发送它们。例如,您可以发送form
,如下所示:
curl -X POST -H "Content-Type: multipart/form-data" -F "file=@sample.txt" -F "json_data='{\"username\":\"xyz\",\"password\":\"xyz\"}'" http://localhost:5000/test
在python中,你可以通过request.form.get("json_data")
得到这个json。它比通过普通multipart/form-data
传递键值对更健壮,因为它支持更复杂的结构。