Sat*_*ish 3 python curl multipartform-data flask
我尝试通过CURL发布multipart/form-data,其中包含,
- 一个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
Run Code Online (Sandbox Code Playgroud)
现在,我需要在flask请求object.i中读取这个多部分数据
request.data
Run Code Online (Sandbox Code Playgroud)
它确实打印了数据,但我不知道如何读取流对象并将文件存储到磁盘.
mha*_*wke 10
你的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 uploaded_documents=@mydocument.pdf \
http://127.0.0.1:5000/api/city
Run Code Online (Sandbox Code Playgroud)
如果您不喜欢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 'uploaded_documents=@mydocument.pdf;type=application/pdf' \
http://127.0.0.1:5000/api/city
Run Code Online (Sandbox Code Playgroud)
最后一个命令会生成如下的HTTP请求:
POST /api/city HTTP/1.1 User-Agent: curl/7.32.0 Host: 127.0.0.1:5000 Accept: */* Authorization:eyJhbGciOiJIUzI1NiIsImV4cCI6MTQyNjcwNTY4NiwiaWF0IjoxNDI2NzAyMDg2fQ.eyJpZCI6MTc3fQ.yBwLFez2RnxTojLniL8YLItWVvBb90HF_yfhcsyg3lY Content-Length: 496 Expect: 100-continue Content-Type: multipart/form-data; boundary=------------------------1ab997efff76fe66 --------------------------1ab997efff76fe66 Content-Disposition: form-data; name="user_data" Content-Type: application/json {"user data": {"preferred_city":"Newyork","within_radious":"5"}} --------------------------1ab997efff76fe66 Content-Disposition: form-data; name="uploaded_documents"; filename="mydocument.pdf" Content-Type: application/pdf this is the mydocument.pdf file. it should be a pdf file, but this is easier to test with. --------------------------1ab997efff76fe66--
然后在Flask中,您可以使用request.form
例如访问表单数据request.form['user_data']
.因为它是一个json字符串,你可以使用它加载它json.loads(request.form['user_data'])
.
可以使用Flask文档中的此处和此处request.file
描述的方式访问上载的文件.
归档时间: |
|
查看次数: |
7915 次 |
最近记录: |