我正在尝试通过 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 显示缺少元数据。我在这里缺少什么?
我认为这里的问题是您在数据时提供一个对象。
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()}
另请注意,通常最好的做法是将变量名称全部小写。