Foxtable(狐表)用户栏目专家坐堂 → 钉钉传输文件的接口,如何以二进制形式打开一个文件,传递给服务端?


  共有3759人关注过本帖树形打印复制链接

主题:钉钉传输文件的接口,如何以二进制形式打开一个文件,传递给服务端?

帅哥哟,离线,有人找我吗?
guosheng
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
钉钉传输文件的接口,如何以二进制形式打开一个文件,传递给服务端?  发帖心情 Post By:2021/1/12 9:35:00 [只看该作者]

 app1/1.txt  是文件的路径,如果在弧表项目下,文件路径是   Dim fl As String = ProjectPath & "Reports\1.txt"
……url?file=******
以下是服务端用python写的接口的传参形式:
  data = {"media": ('1234.txt', open('app1/1.txt', 'rb').read())}

[此贴子已经被作者于2021/1/12 9:37:52编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110809 积分:563983 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/1/12 9:42:00 [只看该作者]

去看钉钉接口的.net代码。

可以参考这里发送文件的用法:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=139788

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/1/13 14:15:00 [只看该作者]

Dim fl As String = Args(0)
Dim data() As Byte = System.IO.File.ReadAllBytes(fl) '把图像文件字节流加载进来,
Return Convert.ToBase64String(data) '转换为Base64格式,不需要做URL编码UrlEncode
如何返回成二进制格式而不是Base64格式啊?

用Convert.ToByte(data) 提示错误:

Exception has been thrown by the target of an invocation.
Unable to cast object of type 'System.Byte[]' to type 'System.IConvertible'.

接口引用代码如下:
------------------------------------------------------
Dim fl As String = ProjectPath & "Reports\abc.zip"
 
Dim hc As New HttpClient("http://send.xinlianhuichuang.com/dingsendfile?name=abc")
'hc.C 

hc.FormData.Add("fb",Functions.Execute("FileToBase64String",fl))
Dim ret As String = hc.GetData
[此贴子已经被作者于2021/1/13 14:21:02编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110809 积分:563983 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/1/13 14:25:00 [只看该作者]

为什么要使用Convert.ToByte?

钉钉接口说明是怎么上传的?钉钉接口的.net代码又是怎么用的?

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/1/13 14:26:00 [只看该作者]

钉钉接口引用是让用二进制打开一个文件,再操作的。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110809 积分:563983 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/1/13 14:28:00 [只看该作者]

接口文档地址发过来看看

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/1/13 15:11:00 [只看该作者]

https://ding-doc.dingtalk.com/document/app/send-normal-messages
https://ding-doc.dingtalk.com/document/app/message-types-and-data-format
多谢了。
以下是用python进行接口发送文件,测试通过了。 
import requests
url = 'http://send.xinlianhuichuang.com/dingsendfile'
data = {'name':'****'}
files = {'fb':open('abc.jpg','rb')}
r = requests.post(url, data=data, files= files)

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110809 积分:563983 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/1/13 15:36:00 [只看该作者]

开发文档没看到有http://send.xinlianhuichuang.com/dingsendfile这个接口的说明

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/1/13 15:42:00 [只看该作者]

这个是 用python封装了钉钉的发送文件的接口(内部进行了accesstoken和用户id等获取的工作)啊。即:http://send.xinlianhuichuang.com/dingsendfile 接口只需要传name(传钉钉用户名) 和 fb(以二进制形式传一个文件)两个参数即可。
我觉得问题就是:HttpClient对象如何添加一个文件参数(二进制格式),之后发送一个url请求啊。
-----------------------------------------------------------------------
Dim fl As String = Args(0)
Dim data() As Byte = System.IO.File.ReadAllBytes(fl) '把图像文件字节流加载进来,
'Return Convert.ToByte(data) '转换为Base64格式,不需要做URL编码UrlEncode
'Return Convert.ToBase64String(data)
Return data  
直接返回byte类型,执行hc.GetData时返回错误:

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20210113160350.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2021/1/13 16:06:42编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110809 积分:563983 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/1/13 16:12:00 [只看该作者]

用sdk吧:.NET版本:点击下载

试试

Dim client As new DefaultDingTalkClient("https://oapi.dingtalk.com/media/upload")
Dim req As new DingTalk.Api.Request.OapiMediaUploadRequest()
req.[Type]= "file"
// 要上传的媒体文件
Dim item As new Top.Api.Util.FileItem("c:\dingtalk.jpg")
req.Media=item
Dim rsp = client.Execute(req, "key","secret")
msgbox(rsp.Body)


 回到顶部
总数 13 1 2 下一页