python - 使用带有 json bdoy 的请求 multipartencoder 上传 Python 文件
问题描述
我有以下 python 函数,我试图将文件上传到接受文件作为多部分流的 API。API 可以与邮递员一起正常工作,但是我在这里努力找出问题所在。
我有参数(json body)与我试图在我的 mp_encoder 变量中编码的文件一起发布到 API。
def callAPIwithFile(apiData,apiUrl):
file_ids = ''
jsonData = {'type':apiData['type'],'fromId':apiData['fromid'],'toUserIds':apiData['userIds'],'toGroupIds1':apiData['groupIds'],'toDepartmentIds1':apiData['departmentIds'],'subject':apiData['subject'],'body':apiData['body'],'attachment':apiData['attachment'],'report':apiData['report']}
mp_encoder = MultipartEncoder(fields={'type':apiData['type'],'fromId':apiData['fromid'],'toUserIds':apiData['userIds'],'toGroupIds1':apiData['groupIds'],'toDepartmentIds1':apiData['departmentIds'],'subject':apiData['subject'],'body':apiData['body'],'attachment':apiData['attachment'],'report':apiData['report'],'file': (apiData["attachment"], open(apiData["attachment"], 'rb'), 'application/vnd.ms-excel')})
print mp_encoder
headers = {'Authorization': 'Bearer jwt'}
resp = requests.post(apiUrl,headers=headers,data=mp_encoder)
print resp.text
print "status code " + str(resp.status_code)
if resp.status_code == 201:
print ("Success")
data = json.loads(resp.text)
file_ids = data['file_ids']
print file_ids
else:
print ("Failure")
在运行代码时,我收到以下错误:
{"statusCode":400,"message":["type must be a valid alpha, beta, Or gamma","body should not be empty"],"error":"Bad Request"}
status code 400
Failure
根据我的理解,我试图发布到 API 的 JSON 正文没有被正确识别。我该怎么做?
请注意,我尝试使用 request.post(apiUrl,file=files,data=data,header=header) 导致意外字段错误。
解决方案
以下答案可以解决我的问题:
headers = {'Authorization': 'Bearer '+token}
mydict = dict(type=apiData['type'], fromId=apiData['fromid'], toUserIds1=apiData['userIds'], toGroupIds=apiData['groupIds'], toDepartmentIds1= apiData['departmentIds'], subject= apiData['subject'], body= apiData['body'], attachment= apiData['attachment'], report= apiData['report'])
resp=requests.post(apiUrl, headers = headers, files=dict(attachment=(apiData["attachment"], open(apiData["attachment"], 'rb'), 'application/vnd.ms-excel')),data=mydict)
推荐阅读
- python - 在 Python 3.6 上使用 brew 安装 pipenv
- c# - C# 获取 Chrome 的所有标签标题和 URL
- sql - 关键字“And”存储过程附近的语法不正确
- javascript - ServiceWorker 处理 fetch 事件到范围之外的 URL
- javascript - 是否可以在 Highcharts 中制作预览/滑块/导航器以匹配图形?
- python - 如何获取文件中每一行的第一个元素并对它们进行排序?
- json - 使打包程序变量成为非必需变量
- r - 在 R 中,如何将多个匹配的术语提取为字符串,如果 TRUE 与 Regex 或 Grep 匹配?
- android - 如何在 phonegap builder 的认证应用中显示 admob 广告?
- python - 使用 python 代码版本 2.7 进行样条拟合(从 excel 文件中读取 x 和 y 的值)