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


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

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

帅哥哟,离线,有人找我吗?
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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


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

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

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | 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)

 回到顶部
帅哥哟,离线,有人找我吗?
guosheng
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/1/13 16:28:00 [显示全部帖子]

钉钉接口是别的人封装好的,我直接引用就行了。 HttpClient对象如何添加一个文件参数(二进制格式)啊 多谢了

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2021/1/13 16:51:00 [显示全部帖子]

问题解决了,多谢了。

 回到顶部