Python 请求在尝试上传附件时提示我缺少元数据

问题描述 投票:0回答:1

我正在尝试通过 API 上传附件。我可以用这个让它在软件的 Swagger 环境中工作:

curl -X 'POST' \
  'https://demo.citywidesolutions.com/v4_server/external/v1/maintenance/service_requests/9/attached_files' \
  -H 'accept: */*' \
  -H 'Content-Type: multipart/form-data' \
  -H 'Authorization: Bearer 123456789' \
  -F 'description=' \
  -F 'data=@This is my file.pdf;type=application/pdf'

当我尝试对 python 请求执行相同操作时,我收到 400 错误,并显示缺少元数据的消息。这是我试图用 python 传递的内容:

import requests
Headers = {'accept': '*/*', 'Content-Type': 'multipart/form-data', 'Authorization': 'Bearer 123456789'}
Attachment = {'description': '', data=open('C:/This is my file.pdf', 'rb')}
Response = requests.post(url='https://demo.citywidesolutions.com/v4_server/external/v1/maintenance/service_requests/9/attached_files', headers=Headers, files=Attachment)

我收到了 400 响应,并且 JSON 显示缺少元数据。我在这里缺少什么?

python api python-requests attachment
1个回答
0
投票

我认为这里的问题是您在数据时提供一个对象。

open()
函数将返回一个bufferedReader对象,而不是文件的实际数据。

参见:

>>> open("README.md", 'rb')
<_io.BufferedReader name='README.md'>

我认为你可以通过改变来解决这个问题

Attachment = {'description': '', data=open('C:/This is my file.pdf', 'rb')}

Attachment = {'description': '', data=open('C:/This is my file.pdf', 'rb').read()}

另请注意,通常最好的做法是将变量名称全部小写。

© www.soinside.com 2019 - 2024. All rights reserved.