钉钉上传文件到钉盘无法返回media id 返回为none
您已经定义了upload_to_dingpan函数,它接受文件路径、访问令牌、agent_id和文件大小作为参数,并使用requests库来执行文件上传操作。
不过,在您的代码中,有一些小问题和潜在的改进点:
access_token和agent_id应该是从钉钉开放平台获取的,这里您提供的是示例值。确保您使用的是有效的值。
在if response and 'media_id' in response:语句中,您试图访问media_id变量,但实际上您应该访问response['media_id']。
在处理API响应时,最好检查响应的JSON内容中是否包含您期望的字段,而不仅仅是检查状态码是否为200。因为即使状态码是200,API也可能返回错误或空响应。
对于文件大小,您应该检查是否超过了钉钉盘所支持的最大限制。
考虑到钉钉API可能更新,建议查看最新的钉钉开放平台文档,确保您的代码与API要求相匹配。
在调用函数上传文件时,应检查返回的响应内容是否为None,因为这表明函数可能因为某种原因(例如HTTP响应码非200)没有成功执行。
下面是一个修正后的代码示例:
import os
import requests
def upload_to_dingpan(file_path, access_token, agent_id):
# 获取文件大小
file_size = os.path.getsize(file_path)
upload_url = f'https://oapi.dingtalk.com/file/upload/single?access_token={access_token}&agent_id={agent_id}'
with open(file_path, 'rb') as file:
files = {'media': file} # 注意这里的键名可能需要根据钉钉API的要求来调整
response = requests.post(upload_url, files=files)
if response.status_code == 200:
result = response.json()
if 'errcode' in result and result['errcode'] == 0: # 检查是否成功上传
print('API 响应结果:', result)
return result
else:
print('文件上传失败,API 返回的错误码:', result['errcode'], '错误信息:', result['errmsg'])
return None
else:
print('文件上传失败,HTTP 响应码:', response.status_code)
return None
# 要上传的文件路径
file_path = r'C:\Users\admin\Desktop\temp\temp.jpg'
# 您的钉盘访问令牌和agent_id(请替换为实际的值)
access_token = '您的access_token'
agent_id = '您的agent_id'
# 调用函数上传文件到钉盘
response = upload_to_dingpan(file_path, access_token, agent_id)
if response and 'media_id' in response:
print('文件上传成功!')
print('钉盘返回的文件信息:', response)
print('media_id:', response['media_id'])
else:
print('文件上传失败。')
请确保替换access_token和agent_id为您从钉钉开放平台获取的实际值。此外,注意检查钉钉API文档,以确认上传文件的正确参数和字段名。
赞1
踩0