asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文件接口
FormItem类
- public class FormItem
- {
- public string Name { get; set; }
- public ParamType ParamType { get; set; }
- public string Value { get; set; }
- }
ParamType枚举
- public enum ParamType
- {
- ///
- /// 文本类型
- ///
- Text,
- ///
- /// 文件路径,需要全路径(例:C:\A.JPG)
- ///
- File
- }
Funcs静态类
- public static class Funcs
- {
- public static string PostFormData(List list,string uri)
- {
- string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
- //请求
- WebRequest req = WebRequest.Create(uri);
- req.Method = "POST";
- req.ContentType = "multipart/form-data; boundary=" + boundary;
- //组织表单数据
- StringBuilder sb = new StringBuilder();
- foreach (FormItem item in list)
- {
- switch (item.ParamType)
- {
- case ParamType.Text:
- sb.Append("--" + boundary);
- sb.Append("\r\n");
- sb.Append("Content-Disposition: form-data; name="" + item.Name + """);
- sb.Append("\r\n\r\n");
- sb.Append(item.Value);
- sb.Append("\r\n");
- break;
- case ParamType.File:
- sb.Append("--" + boundary);
- sb.Append("\r\n");
- sb.Append("Content-Disposition: form-data; name="media"; filename=""+item.Value+""");
- sb.Append("\r\n");
- sb.Append("Content-Type: application/octet-stream");
- sb.Append("\r\n\r\n");
- break;
- }
- }
- string head = sb.ToString();
- //post字节总长度
- long length = ;
- byte[] form_data = Encoding.UTF8.GetBytes(head);
- //结尾
- byte[] foot_data = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
- List fileList = list.Where(f => f.ParamType == ParamType.File).ToList();
- length = form_data.Length + foot_data.Length;
- foreach (FormItem fi in fileList)
- {
- FileStream fileStream = new FileStream(fi.Value, FileMode.Open, FileAccess.Read);
- length += fileStream.Length;
- fileStream.Close();
- }
- req.ContentLength = length;
- Stream requestStream = req.GetRequestStream();
- //发送表单参数
- requestStream.Write(form_data, , form_data.Length);
- foreach (FormItem fd in fileList)
- {
- FileStream fileStream = new FileStream(fd.Value, FileMode.Open, FileAccess.Read);
- //文件内容
- byte[] buffer = new Byte[checked((uint)Math.Min(, (int)fileStream.Length))];
- int bytesRead = ;
- while ((bytesRead = fileStream.Read(buffer, , buffer.Length)) != )
- requestStream.Write(buffer, , bytesRead);
- //结尾
- requestStream.Write(foot_data, , foot_data.Length);
- }
- requestStream.Close();
- //响应
- WebResponse pos = req.GetResponse();
- StreamReader sr = new StreamReader(pos.GetResponseStream(), Encoding.UTF8);
- string html = sr.ReadToEnd().Trim();
- sr.Close();
- if (pos != null)
- {
- pos.Close();
- pos = null;
- }
- if (req != null)
- {
- req = null;
- }
- return html;
- }
- ///
- /// 从URL地址下载文件到本地磁盘
- ///
- /// 本地磁盘地址
- /// URL网址
- ///
- public static string SaveFileFromUrl(string FileName, string Url)
- {
- WebResponse response = null;
- Stream stream = null;
- try
- {
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
- response = request.GetResponse();
- stream = response.GetResponseStream();
- if (!response.ContentType.ToLower().StartsWith("text/"))
- {
- SaveBinaryFile(response, FileName);
- }
- else
- {
- StreamReader sr = new StreamReader(stream, System.Text.Encoding.UTF8);
- return sr.ReadToEnd();
- }
- }
- catch (Exception err)
- {
- return err.ToString();
- }
- return "complete";
- }
- ///
- /// 将二进制文件保存到磁盘
- ///
- /// 将二进制文件保存到磁盘
- // 将二进制文件保存到磁盘
- private static bool SaveBinaryFile(WebResponse response, string FileName)
- {
- bool Value = true;
- byte[] buffer = new byte[];
- try
- {
- if (File.Exists(FileName))
- File.Delete(FileName);
- Stream outStream = System.IO.File.Create(FileName);
- Stream inStream = response.GetResponseStream();
- int l;
- do
- {
- l = inStream.Read(buffer, , buffer.Length);
- if (l > )
- outStream.Write(buffer, , l);
- }
- while (l > );
- outStream.Close();
- inStream.Close();
- }
- catch
- {
- Value = false;
- }
- return Value;
- }
- }
调用代码
- //新建一个form表单项,就是需要提交哪些字段和数据的列表
- List list = new List();
- //添加微信接口上的access_token参数,注意,access_token是有过期时间的,代码中的access_token肯定过期了,获取access_token的地址请点击我,需要有自己的服务号才会有的
- list.Add(new FormItem() { Name = "access_token", ParamType = ParamType.Text, Value = "MlfTORyg_dRTuiQThmKUxVVkK7q_SMEd0y9GwBmj6NJw3E0J2jVnC3RxgdO1Yjog2QD4DDxhdqEkZaklR7czq8sSbW4mnhM7n9-5lIIymVGkrBAv2nnnktUyYcuYTMs2SYtp-pn6IWEtTpsFVlUFZQ" });
- //添加FORM表单中这条数据的类型,目前只做了两种,一种是文本,一种是文件
- list.Add(new FormItem() { Name = "type", Value = "image", ParamType = ParamType.Text });
- //添加Form表单中文件的路径,路径必须是基于硬盘的绝对路径
- list.Add(new FormItem() { Name = "media", Value = @"d:\1.jpg", ParamType = ParamType.File });
- //通过Funcs静态类中的PostFormData方法,将表单数据发送至http://file.api.weixin.qq.com/cgi-bin/media/upload腾讯上传下载文件接口
- string result = Funcs.PostFormData(list, "http://file.api.weixin.qq.com/cgi-bin/media/upload");
- //获取返回值,并取出的结果中的media_id,注意,有可能返回的是腾讯的错误代码,请自行判断
- System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
- var mydata=jss.Deserialize(result);
- //通过Funcs静态类中的SaveFileFromUrl方法,将指定微信media_id的文件下载到本机
- var saveResult=Funcs.SaveFileFromUrl(@"d:\lee.jpg", "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=MlfTORyg_dRTuiQThmKUxVVkK7q_SMEd0y9GwBmj6NJw3E0J2jVnC3RxgdO1Yjog2QD4DDxhdqEkZaklR7czq8sSbW4mnhM7n9-5lIIymVGkrBAv2nnnktUyYcuYTMs2SYtp-pn6IWEtTpsFVlUFZQ&media_id=" + mydata["media_id"].ToString());
这样就完成了模拟CURL调用微信上传下载多媒体文件的接口
asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文件接口的更多相关文章
- asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文
近公司项目上在开发微信服务号的接口,需要给用户回复图片或语音或视频,这个时候就需要用到 上传下载多媒体文件接口,微信在这方面推荐采用的是开源函数库curl实现的,CURL项目包括很多版本,我主要测试的 ...
- C#微信公众号开发系列教程六(被动回复与上传下载多媒体文件)
微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...
- NET实现微信公共平台上传下载多媒体文件(转)
举个例子,有人对着我们的公共微信号拍个照片发送过来,然后我们处理这个照片,比如进行ocr识别字(随后就会降到这个例子),或者人脸识别,或者拍照取证等,这些功能都是相当有用的.那么我们现在就要分析一下这 ...
- 使用curl / wget命令上传下载FTP
curl可以在shell下轻松上传下载ftp上的文件,相比ftp命令更具有优势,因为它能在单命令条件下,下载或者上传一个ftp文件,甚至可以删除文件. 下面看实例: 1.列出ftp服务器上的目录列表: ...
- ASP.NET MVC 微信公共平台开发之获取用户消息并处理
ASP.NET MVC 微信公共平台开发 获取用户消息并处理 获取用户消息 用户发送的消息是在微信服务器发送的一个HTTP POST请求中包含的,获取用户发送的消息要从POST请求的数据流中获取 微信 ...
- ASP.NET MVC 微信公共平台开发之验证消息的真实性
ASP.NET MVC 微信公共平台开发 验证消息的真实性 在MVC Controller所在项目中添加过滤器,在过滤器中重写 public override void OnActionExecuti ...
- ASP.NET MVC 微信公共平台开发之 微信接入
ASP.NET MVC 接入微信公共平台 申请微信公共账号 既然要接入微信公共平台,微信公共号是必须的(当然如果只是测试的话也可以申请微信公共平台接口测试账号),来这里微信公共平台 申请微信公共号(注 ...
- PHP版微信公共平台消息主动推送,突破订阅号一天只能发送一条信息限制
2013年10月06日最新整理. PHP版微信公共平台消息主动推送,突破订阅号一天只能发送一条信息限制 微信公共平台消息主动推送接口一直是腾讯的私用接口,相信很多朋友都非常想要用到这个功能. 通过学习 ...
- 第三方网站不能调用微信公众平台里的图片了 显示"此图片来自微信公众号平台未经允许不可引用"
下午ytkah在自己小博客搜索时看到有几篇文章图片显示不了,再访问一些网站时发现有些图片无法显示出来,显示"此图片来自微信公众号平台未经允许不可引用",如下图所示,这个应该是最近微 ...
随机推荐
- MHA 一主一从搭建
安装基本环境介绍 一主一从 MHA manager & slave node2 192.168.56.27 Master机器 node1 192.168.56.26 VIP 19 ...
- ubuntu安装完整版的vim
apt-get remove vim-commonapt-get install vim
- Android学习笔记_19_广播接收者 BroadcastReceiver及其应用_窃听短信_拦截外拨电话
一.广播接收者类型: 广播被分为两种不同的类型:“普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”. 普通广播是完全异步的,可以在同一时刻(逻辑上 ...
- Android学习笔记_6_保存文件到SDCard
一.加入访问sdcard的权限 Environment.getExternalStorageState()方法用于获取SDCard的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态 ...
- android imageview使用的时候 引用资源src和background的区别
android imageview使用的时候 引用资源时src和background的区别 src更强调内容并且不行拉伸图片进行适配,而background更注重引用图片,会对图片进行拉伸
- linux系统命令与常识
之前短期学过linux,用到时才发现已经忘得一干二净了. 现在对学过的和了解到的做一个总结: 先明确一些使用工具: winscp : WinSCP是一个Windows环境下使用SSH的开源图形化SFT ...
- ajax 全局拦载处理,可加密、过滤、筛选、sql防注入处理
//此方法放在公用的js里面即可.如此:所有的ajax请求都会通过此 $.ajaxSetup({ contentType: "application/x-www-form-urlencode ...
- Linux修改时区以及同步时间
Centos7为例:修改时区 timedatectl list-timezones |grep Shanghai #查找中国时区的完整名称 Asia/Shanghai timedatectl set- ...
- if switch for while
---恢复内容开始--- 一.if 说明:判断表达式,看结果执行语句体 public class IfDemo2 { public static void main(Strin ...
- c++后台开发 准备材料
后台开发知识点 面面俱到很难,一个领域钻研的很深也很难.我认识的大神里有把C++语言吃的非常透的,也有实验室就是搞分布式的,拿offer都非常轻松. 博客(C++后台/基础架构) http://www ...