使用请求将文件上传到python-eve

时间:2015-04-12 23:12:06

标签: python python-requests eve

我尝试使用请求库将图片上传到python-eve服务器。为此,我发送一个multipart / form-data请求。这似乎是我的架构的问题,如下所示:

schema = {
    'name': {
        'type': 'string',
        'required': True
    },
    'description': {
        'type': 'string'
    },
    'picture': {
        'type': 'media'
    },
     'properties': {
         'type' : 'dict'
     }
}

请求如下所示:

import requests

file = open('/home/user/Desktop/1500x500.jpeg', 'rb')
payload = {'name': 'hello', 'properties': {'status': 'on_hold'}}
r = requests.post("http://localhost:5001/node", data=payload, files={'picture': file})

我得到的是ResourceInvalid异常:

ResourceInvalid: Failed. Response status: 422. Response message: UNPROCESSABLE ENTITY. Error message: {"_status": "ERR", "_issues": {"properties": "must be of dict type"}, "_error": {"message": "Insertion failure: 1 document(s) contain(s) error(s)", "code": 422}}

这有什么解决方案吗?我错过了有关请求格式的内容吗?

2 个答案:

答案 0 :(得分:3)

这样的事情应该可以正常工作:

import requests

file = open('/home/user/Desktop/1500x500.jpeg', 'rb')
payload = {'name': 'hello'}

r = requests.post("http://localhost:5001/node", data=payload, files={'picture': file})

答案 1 :(得分:3)

我刚刚有一个类似的issue。我建议您尝试以这种方式更改代码:将字典转储到json对象中,并添加标题来描述您要发送的内容。

import requests
import json

file = open('/home/user/Desktop/1500x500.jpeg', 'rb')
payload = {'name': 'hello', 'properties': {'status': 'on_hold'}}
headers = {'Content-type': 'application/json; charset=utf-8'}
r = requests.post("http://localhost:5001/node", data=json.dumps(payload), files={'picture': file}, headers=headers)