python 钉钉文件上传-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

python 钉钉文件上传

蓝蓝天空 2017-01-08 10:19:14 5542

第一,现有的钉钉接口文件上传说明示例太过简单
第二,自己过python的requesets post方式进行:
将access_token,type设置到params,将media 设置到files,最后通过requests.request(method=method,url=url, **kwargs )上传,能上传,不过文件没有后缀,二进制数据都直接被当做文本在网页呈现,能否说一下python的上传思路?

Python
分享到
取消 提交回答
全部回答(4)
  • 巨蟒
    2019-07-17 20:41:12

    from urllib3 import encode_multipart_formdata
    import requests
    headers={}
    data={}
    url = 'https://oapi.dingtalk.com/media/upload?access_token=' + access_token + '&type=file'
    def post_files(url,headers,data,filename,filepath):

    """
        :param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload.
        ``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')``
        or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content-type'`` is a string
        defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers
        to add for the file.
    """
    data['media']= ('test.py', open(r'C:\Users\Administrator\Desktop\test.py', 'rb').read())
    encode_data = encode_multipart_formdata(data)
    data = encode_data[0]
    headers['Content-Type'] = encode_data[1]
    r = requests.post(url, headers=headers, data=data)
    print(json.loads(r.text)["media_id"])
    

    from urllib3 import encode_multipart_formdata
    import requests
    headers={}
    data={}
    url = 'https://oapi.dingtalk.com/media/upload?access_token=' + access_token + '&type=file'
    def post_files(url,headers,data,filename,filepath):

    data['media']= ('test.py', open(r'C:\Users\Administrator\Desktop\test.py', 'rb').read())
    encode_data = encode_multipart_formdata(data)
    data = encode_data[0]
    headers['Content-Type'] = encode_data[1]
    r = requests.post(url, headers=headers, data=data)
    print(json.loads(r.text)["media_id"])
    0 0
  • 一溜
    2019-07-17 20:41:12
    for filename in file_dict.keys():
      files[filename] = open(file_dict[filename], mode='rb')
    r = requests.post(url, data=data,files=files)
    

    如果你说的是钉钉这个接口的话:https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.JknMf3&treeId=172&articleId=104971&docType=1

    应该是用这种方式来上传,接口文档描述得确实不是很清晰,给的是java的代码示例,对于mutipart格式的接口来说,这个接口协议就是耍榴芒。

    0 0
  • luson
    2019-07-17 20:41:12

    建议楼主修改下问题描述,我也没看明白啊

    0 0
  • 西秦说云
    2019-07-17 20:41:12

    您具体的需求是什么呢?如果单纯是后缀问题,您可以在您自行的业务系统中处理的

    0 0
添加回答
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程