如何读取烧瓶中的multipart/form-data

jas*_*jas 6 python flask

我无法读取通过XMLHttpRequest发布的烧瓶中的数据.我正在使用这个jquery插件裁剪图像并上传到服务器

https://codecanyon.net/item/slim-image-cropper-responsive-uploading-and-ratio-cropping-plugin/16364167

data - 在使用XMLHttpRequest将图像发送到服务器之前,在json中收集和隐藏有关图像的信息

var formData = new FormData();
var name = "ex"; // Just an example
formData.append(name, JSON.stringify(data));
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.send(formData);
Run Code Online (Sandbox Code Playgroud)

在我的烧瓶代码中,我打印请求标题以查看内容类型

print(request.headers)
Run Code Online (Sandbox Code Playgroud)

我明白这一点

Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,sv;q=0.6,fr;q=0.4
Host: localhost:5000
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary5e7lMMIQavXzSZg9
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36
Connection: keep-alive
Content-Length: 62714
Origin: http://localhost:5000
Pragma: no-cache
Cache-Control: no-cache
Cookie: session=eyJfZnJlc2giOmZhbHNlLCJjc3JmX3Rva2VuIjoiYTJhNTNlYzRkYjZlYzgzNzM2NDQ1ZjM5ZDAxNmY0MTlmY2RiZmRiOCIsInVzZXJuYW1lIjoidXNlcjEifQ.Cv2ADg.d8chDgzAA7fS2P9KcwzRINvLGOU
Referer: http://localhost:5000/loadProfile
Accept: */*
Run Code Online (Sandbox Code Playgroud)

我无法阅读内容

request.get_json()

如果我试试这个

print(request.get_json())
data = request.get_json()
print(data['name'])
Run Code Online (Sandbox Code Playgroud)

TypeError:'NoneType'对象不可订阅

在HTTP post请求中,我可以看到这一点

------ WebKitFormBoundary0okhJV9YZK0uArTm Content-Disposition:form-data; name ="slim []"{"server":[{"status":"SUCCESS"}],"meta":{},"input":{"name":"sample-img.jpg","type ":" 图像/ JPEG " "大小":41319, "宽度":400, "高度":300}, "输出":{ "宽度":400, "高度":300, "图像":" 数据:图像/ JPEG; BASE64,/ 9J/.......

据作者说

Slim使用POST请求以JSON格式(包含base64编码图像)发送数据.

格式:

{
   "server":null,
   "meta":{

   },
   "input":{
      "name":"stars.jpg",
      "type":"image/jpeg",
      "size":null,
      "width":800,
      "height":1200
   },
   "output":{
      "width":150,
      "height":100,
      "image":"data:image/jpeg;base64..."
   },
   "actions":{
      "rotation":0,
      "crop":{
         "x":0,
         "y":333.33333333333337,
         "width":150,
         "height":100.10460251046025,
         "type":"manual"
      },
      "size":null
   }
}
Run Code Online (Sandbox Code Playgroud)

如果我做

print(request.form)
Run Code Online (Sandbox Code Playgroud)

我可以看到

ImmutableMultiDict([('slim []','{"server":[{"status":"SUCCESS"}],"meta":{},"input":{"name":"sample-img.jpg " "类型": "图像/ JPEG", "大小":41319, "宽度":400, "高度":300}, "输出":{ "宽度":400, "高度":300," 图像":" 数据:图像/ JPEG; BASE64,/ 9J/4AAQ ....

但我不知道如何阅读这篇帖子数据.例如获取名称的值

小智 6

您将表单数据作为键值对发送试试这个:

import json
ex = json.loads(request.form.get('ex'))
print ex
Run Code Online (Sandbox Code Playgroud)


Cha*_*erV 5

您可以使用request.form.to_dict()将结果转换成字典形式。

或者,您可以使用如下所示的内容:

from werkzeug.datastructures import ImmutableMultiDict data = dict(request.form) print data

  • 为什么这个示例导入 `ImmutableMultiDict` 但不使用它? (5认同)