您的curl 命令存在一些问题,所有这些问题都可能导致该问题:
-
application/multipart/form-data
不是有效的 MIME 类型,因此Content-Type
是无效的。对于文件上传,内容类型通常是multipart/form-data
。另外,您不需要指定内容类型,curl 会根据参数计算出内容类型。
- Using
-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[email protected] /cdn-cgi/l/email-protection \
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] /cdn-cgi/l/email-protection;type=application/pdf' \
http://127.0.0.1:5000/api/city
最后一个命令将生成如下 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
, e.g. request.form['user_data']
。由于它是一个 json 字符串,因此您可以使用以下命令加载它json.loads(request.form['user_data'])
.
可以使用以下方式访问上传的文件request.file
如上所述here http://flask.pocoo.org/docs/0.10/quickstart/#file-uploads and here http://flask.pocoo.org/docs/0.10/patterns/fileuploads/#uploading-files在 Flask 文档中。