以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  钉钉传输文件的接口,如何以二进制形式打开一个文件,传递给服务端?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=159874)

--  作者:guosheng
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间:2021/1/12 9:42:00
--  
去看钉钉接口的.net代码。

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

--  作者:guosheng
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间:2021/1/13 14:25:00
--  
为什么要使用Convert.ToByte?

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

--  作者:guosheng
--  发布时间:2021/1/13 14:26:00
--  
钉钉接口引用是让用二进制打开一个文件,再操作的。
--  作者:有点蓝
--  发布时间:2021/1/13 14:28:00
--  
接口文档地址发过来看看
--  作者:guosheng
--  发布时间: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)

--  作者:有点蓝
--  发布时间:2021/1/13 15:36:00
--  
开发文档没看到有http://send.xinlianhuichuang.com/dingsendfile这个接口的说明
--  作者:guosheng
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间: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)