.net C#写钉钉上传图片素材接口解决返回系统繁忙问题

摘要:
钉钉上传材料的API文档相对简单,尤其是HTTP头根本没有编写,演示Www.68mn也没有编写。看了朋友的帖子后,原理很清楚。你可以参考它。http://blog.csdn.net/xxdddail/article/details/51983487然而,有一个问题尚未解决。文章中还提到,type=file是可行的,type=image总是提示我学习几天。我指的是以下代码https://github.com/icodegame/DTSigninRemind最后,我发现了问题。问题似乎出在C#提供的WebClient上。我使用HttpWebRequest来解决它。有关http头的更多信息,请阅读本文,http://blog.csdn.net/xiaojianpitt/article/details/6856536上面github上的代码是异步的。如果我需要同步模式,我将直接将其更改为同步模式。

本片主要解决“type=file时是可行的,type=image时不知为何总是提示【系统繁忙】”的问题。

钉钉上传素材的API文档写的比较简单,尤其是http头那块完全没写,demo也没有.net的,杯具啊。

看了一位仁兄的帖子,原理写的很清楚,大家可以参考一下。

http://blog.csdn.net/xxdddail/article/details/51983487

但有一个问题没有解决,文章里也提到了,就是type=file时是可行的,type=image时不知为何总是提示【系统繁忙】

.net C#写钉钉上传图片素材接口解决返回系统繁忙问题第1张

研究了好几天,参考了下面这位仁兄的代码

https://github.com/icodegame/DTSigninRemind

终于找到了问题,貌似是C#提供的WebClient的问题,改用HttpWebRequest解决了。

在自定义头一样的情况下WebClient不行,但HttpWebRequest可以。

 想了解http头的话,请看这一篇,http://blog.csdn.net/xiaojianpitt/article/details/6856536

上面github上的仁兄代码是异步的,我需要同步方式,就直接改成同步的了。如果需要异步的代码可以用上面链接里的代码。

代码如下

 1 public static string PostFile(string url, string fileWithPath)
 2         {
 3             var result = string.Empty;
 4             var request = (HttpWebRequest)WebRequest.Create(url);
 5             var boundary = "----------" + DateTime.Now.Ticks.ToString("x");
 6             request.ContentType = "multipart/form-data; boundary=" + boundary;
 7             request.Method = "POST";
 8             using (Stream requestStream = request.GetRequestStream())
 9             {
10                 byte[] boundarybytes = Encoding.UTF8.GetBytes("--" + boundary + "
");
11                 byte[] trailer = Encoding.UTF8.GetBytes("
--" + boundary + "–-
");
12                 var filename = Path.GetFileName(fileWithPath);
13                 using (FileStream fs = new FileStream(fileWithPath, FileMode.Open, FileAccess.Read))
14                 {
15                     byte[] bArr = new byte[fs.Length];
16                     fs.Read(bArr, 0, bArr.Length);
17                     requestStream.Write(boundarybytes, 0, boundarybytes.Length);
18                     var header = $"Content-Disposition:form-data;name="media";filename="{filename}"
filelength="{fs.Length}"
Content-Type:application/octet-stream

";
19                     byte[] postHeaderBytes = Encoding.UTF8.GetBytes(header.ToString());
20                     requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
21                     fs.Close();
22                     requestStream.Write(bArr, 0, bArr.Length);
23                     requestStream.Write(trailer, 0, trailer.Length);
24                 }
25             }
26             var response = (HttpWebResponse)request.GetResponse();
27             var responseStream = response.GetResponseStream();
28             using (var streamReader = new StreamReader(response.GetResponseStream()))
29             {
30                 result = streamReader.ReadToEnd();
31             }
32             return result;
33         }

调用代码

1 var fileName = @"d:a.jpg";
2 var url = $"https://oapi.dingtalk.com/media/upload?access_token={access_token}&type=image";
3 var requestResult = PostFile(url, fileName);

返回的结果

.net C#写钉钉上传图片素材接口解决返回系统繁忙问题第2张

免责声明:文章转载自《.net C#写钉钉上传图片素材接口解决返回系统繁忙问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Quartz在Spring中动态设置cronExpression (spring设置动态定时任务)第21课 微信支付:接口规则、参数设定规则、安全规范下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

js传递数据一些方式

1.用Image对象的src属性 var img = new Image(); img.src = "http://www.xxx.con/?data1=1"; 创建Image对象,通过其src属性可以向xxx地址传递数据,后台php可以通过GET方法获取src属性中“?”以后的数据。 2.script标签的src属性 var sc = document....

序列化 反序列化 MessagePack for C#

阅读目录 快速序列化组件MessagePack介绍 简介 使用 快速开始 分析器 内置的支持类型 对象序列化 DataContract兼容性 序列化不可变对象(序列化构造器) 序列化回调 Union Dynamic(Untyped)反序列化 Object 类型序列化 Typeless 性能 反序列化中每个方法的性能 LZ4压缩 与protobuf,JS...

Vue.js 源码分析(二十九) 高级应用 transition-group组件 详解

对于过度动画如果要同时渲染整个列表时,可以使用transition-group组件。 transition-group组件的props和transition组件类似,不同点是transition-group组件的props是没有mode属性的,另外多了以下两个props    tag                  标签名    moveClass   ...

三种比较好玩的黑客效果JS代码(摘取)

<html> <head> <title>The Matrix</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/ja...

移动端HTML5实现文件上传

PC端上传文件多半用插件,引入flash都没关系,但是移动端要是还用各种冗余的插件估计得被喷死,项目里面需要做图片上传的功能,既然H5已经有相关的接口且兼容性良好,当然优先考虑用H5来实现。 用的技术主要是: ajax FileReader FormData HTML结构: <div class="camera-area"> &l...

m3u8编码视频webgl、threejs渲染视频纹理demo

<!DOCTYPE html> <html> <head> <meta charset=utf-8 /> <title>fz-live</title> <link href="http://t.zoukankan.com/css/video.css" rel="stylesh...