期望通过调用API实现文件上传,postman成功后直接利用postman导出代码却执行报错

img

img

img

import requests

url = "https://open.feishu.cn/open-apis/drive/v1/files/upload_all"

payload = {'parent_type': 'explorer',
           'parent_nade': 'fldcnwvSWiepfDHiuoAl7AoEQFd',
           'file_name': 'Data.xlsx',
           'size': '25088'}
files = [
    ('file', ('Data.xls', open('C:/Scripts/Data.xls', 'rb'), 'application/vnd.ms-excel'))
]
headers = {
    'Authorization': 'Bearer u-311OyPxWzNR6EirFakNSab',
    'Content-Type': 'multipart/form-data; boundary="foo123"'
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)

本地Python3.7.7
自己尝试过解决,但估计是关于file这边的用法,涉及到盲区。

报错提示参数错误,看你代码上excel文件扩展名不一致

img

表单的结构是一个KV结构,所以通过表单发送文件是也需要构造一个字典

  • field_name: file

其中field_name应该与表单中input元素的name一致: photo

file则有多种写法:

  • fileobj
  • ('file_name', 'file_content')
  • ('filename', 'fileobj', 'content_type' )

之所以有这样的写法差异,是因为通过fileobj,可以自动的获取名字、内容、类型等信息

其他的写法是提供了对部分信息 “自定义”的能力
来源:测试开发研习社 - requests基本用法- 文件上传

此外payload 和Content-Type也不需要进行传递,会自动构建
参考代码

import requests

url = "https://open.feishu.cn/open-apis/drive/v1/files/upload_all"

files = {"file": open(r"C:/Scripts/Data.xls", "rb")}
headers = {
    'Authorization': 'Bearer u-311OyPxWzNR6EirFakNSab',  # 注意t更新token
}


response = requests.request("POST", url, headers=headers, files=files)

print(response.text)

如有帮助 ,还请采纳,欢迎追问和交流~

还是东看西看乱找乱试,最后如下截图成功

img