我尝试通过包含以下内容的CURL发布多部分/表单数据:
- JSON对象
- 流对象pdf和jpeg文件
curl -i -X POST -H
"Authorization":"eyJhbGciOiJIUzI1NiIsImV4cCI6MTQyNjcwNTY4NiwiaWF0IjoxNDI2NzAyMDg2fQ.eyJpZCI6MTc3fQ.yBwLFez2RnxTojLniL8YLItWVvBb90HF_yfhcsyg3lY" -H
"Content-Type:application/multipart/form-data" -d '{"user data": {"preferred_city":"Newyork","within_radious":"5"}}' --data-binary
"uploaded_documents":@mydocument.pdf http://127.0.0.1:5000/api/city
现在,我需要在flask请求对象中读取此多部分数据。
request.data
它确实打印了数据,但是我不确定如何读取流对象并将文件存储到磁盘。
curl命令存在一些问题,所有这些都可能导致该问题:
application/multipart/form-data
不是有效的MIME类型,因此Content-Type
无效。对于文件上传,内容类型通常为multipart/form-data
。另外,您无需指定内容类型,curl会根据参数确定其内容。-F
代替-d
将导致curl生成并发布multipart/form-data
具有有效边界的表单。将它们放在一起将导致以下curl命令:
curl -i -H "Authorization":"eyJhbGciOiJIUzI1NiIsImV4cCI6MTQyNjcwNTY4NiwiaWF0IjoxNDI2NzAyMDg2fQ.eyJpZCI6MTc3fQ.yBwLFez2RnxTojLniL8YLItWVvBb90HF_yfhcsyg3lY" \
-F user_data='{"user data": {"preferred_city":"Newyork","within_radious":"5"}}' \
-F [email protected] \
http://127.0.0.1:5000/api/city
如果您不喜欢curl所选择的内容,则可以为每个部分指定内容类型(文件为application / octet-stream):
curl -i -H "Authorization":"eyJhbGciOiJIUzI1NiIsImV4cCI6MTQyNjcwNTY4NiwiaWF0IjoxNDI2NzAyMDg2fQ.eyJpZCI6MTc3fQ.yBwLFez2RnxTojLniL8YLItWVvBb90HF_yfhcsyg3lY" \
-F 'user_data={"user data": {"preferred_city":"Newyork","within_radious":"5"}};type=application/json' \
-F '[email protected];type=application/pdf' \
http://127.0.0.1:5000/api/city
最后一条命令将生成如下HTTP请求:
POST / API /城市HTTP / 1.1 用户代理:卷曲/ 7.32.0 主持人:127.0.0.1:5000 接受:* / * 授权:eyJhbGciOiJIUzI1NiIsImV4cCI6MTQyNjcwNTY4NiwiaWF0IjoxNDI2NzAyMDg2fQ.eyJpZCI6MTc3fQ.yBwLFez2RnxTojLniL8YLItWVvBb90HF_yfhcsyg3lY 的Content-Length:496 期望:100继续 的Content-Type:多部分/表单数据;边界= ------------------------ 1ab997efff76fe66 ----------------------- --- 1ab997efff76fe66 内容处置:表格数据;name =“ user_data” 内容类型:application / json {“用户数据”:{“ preferred_city”:“ Newyork”,“ within_radious”:“ 5”}}} -------------- ------------ 1ab997efff76fe66 Content-Disposition:表单数据;name =“ uploaded_documents”; Content-Type:application / pdf 这是mydocument。 它应该是pdf文件,但这更易于测试。 -------------------------- 1ab997efff76fe66--
然后在瓶则可以使用访问形式的数据request.form
,例如request.form['user_data']
。由于它是json字符串,因此您可以使用加载它json.loads(request.form['user_data'])
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句