asp.net mvc微信公众号开发之上传永久素材

1、上传永久图片素材,注意构造请求头部信息时name="media"就行了

  视图代码:

  @using (Html.BeginForm("UploadFile", "MenuConfig", FormMethod.Post, new { enctype = "multipart/form-data" }))
  {
    <span>上传文件</span>
    <input type="file" name="file" id="f" />
    <input id="ButtonUpload" type="submit" value="提交" />
  }

  Action代码:

  /// <summary>

  /// 上传图片素材调用微信接口
  /// </summary>
  /// <param name="file"></param>
  /// <returns></returns>
  public JsonResult UploadPhoto(HttpPostedFileBase file)
  {
    var buf = new byte[file.InputStream.Length];
    file.InputStream.Read(buf, 0, (int)file.InputStream.Length);
    string resultUpload = WeixinConfigBusiness.HttpUploadFile(file.FileName, buf);
    var jsonObj = JsonConvert.DeserializeObject<JObject>(resultUpload);//获取上传后返回的结果状态
    if (jsonObj["media_id"] != null && jsonObj["media_id"].ToString() != "")//如果上传成功.....
    {
      return Json(new { result = true });
    }
      return Json(new { result = false });
  }

  

  /// <summary>
  /// 上传永久图片素材并获取media_id和图片URL
  /// </summary>
  public static string HttpUploadFile(string path, byte[] bf)
  {

    var accessToken = new WeixinConfigBusiness().GetAccessToken();
    string url = string.Format("https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={0}&type={1}", accessToken, "image");
    return HttpUploadPhoto(url, path, bf);
  }
  /// <summary>
  ///
  /// </summary>
  /// <param name="url"></param>
  /// <param name="path"></param>
  /// <param name="bf"></param>
  /// <returns></returns>
  public static string HttpUploadPhoto(string url, string path, byte[] bf)
  {
    var accessToken = new WeixinConfigBusiness().GetAccessToken();
    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
    CookieContainer cookieContainer = new CookieContainer();
    request.CookieContainer = cookieContainer;
    request.AllowAutoRedirect = true;
    request.Method = "POST";
    string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线
    request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary;
    byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
    byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
    int pos = path.LastIndexOf("\\");
    string fileName = path.Substring(pos + 1);
    //请求头部信息
    StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name=\"media\";filename=\"{0}\"\r\nContent-Type:application/octet-stream\r\n\r\n", fileName));
    byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString());
    Stream postStream = request.GetRequestStream();
    postStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
    postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
    postStream.Write(bf, 0, bf.Length);
    postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
    postStream.Close();
    //发送请求并获取相应回应数据
    HttpWebResponse response = request.GetResponse() as HttpWebResponse;
    Stream instream = response.GetResponseStream();
    StreamReader sr = new StreamReader(instream, Encoding.UTF8);
    string content = sr.ReadToEnd();
    return content;
  }

  

时间: 2024-10-05 19:34:15

asp.net mvc微信公众号开发之上传永久素材的相关文章

第三方微信公众号开发上传永久素材,当是其他类型的素材是参数如何设置

微信开发文档是这样说的,可是也没说清楚这个filename.filelength,conten-type到底是什么... 起初我三个参数都给了,但是搞了半天都返回错误代码41005,缺少多媒体文件数据...好像是这个错..我忘了..反正很莫名其妙... 网上找了很久说啥版本问题的都试过,不行啊... 后来发现还是media这个参数集合给错了...orz... filename是文件地址.filelength要给正确的文件大小...但是到底是啥...最终我都没研究出来... 后来我索性就给个fil

微信公众号开发上传图文素材带有卡片小程序报错:errcode=45166,errmsg = invalid content hint

微信公众号开发自从支持允许在群发图文中插入小程序,方便了小程序的运营及推广.最近在三方服务开发中,要支持图文素材插入小程序遇到了一个很是棘手的问题.官方给出的插入小程序的示例支持文字.图片.卡片.如下面api文档介绍: 按照示例插入文字小程序和图片小程序都没问题,但是插入卡片小程序却是一直报错errcode=45166,errmsg = invalid content hint.检查了好长时间,才发现卡片小程序的示例中data-progarm-imageurl参数写错了,应该是data-mini

微信公众号开发---上传临时素材到公众号遇到的问题:&quot;errcode&quot;:41005,&quot;errmsg&quot;:&quot;media data missing

1.上传临时素材到公众号遇到的问题:"errcode":41005,"errmsg":"media data missing 解决办法:因为php版本的原因,上传素材一直保错.php的curl的curl_setopt 函数存在版本差异 php5.5已经把通过@加文件路径上传文件的方式给放入到Deprecated中了.php5.6默认是不支持这种方式了 特殊处理1:curl_setopt ( $ch, CURLOPT_SAFE_UPLOAD, false);

C#/ASP.NET MVC微信公众号接口开发之从零开发(三)回复消息 (附源码)

C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码) 一.拼凑回复的XML字符串 微信被动回复的形式有一下六种: 1 回复文本消息 2 回复图片消息 3 回复语音消息 4 回复视频消息 5 回复音乐消息 6 回复图文消息 分别对应不同的XML形式,这里以文本消息和图文为例,读者举一反三其他的类似,不再赘述:

C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码)

文章导读: C#微信公众号接口开发之从零开发(一) 接入微信公众平台 微信接入之后,微信通过我们接入的地址进行通信,其中的原理是微信用户发送消息给微信公众账号,微信服务器将消息以xml的形式发送到我们的绑定的地址上,通过解析XML数据,获取到微信用户发送的消息,让根据微信消息(文本:关键字,图片,语音等等)回复XML格式的数据给微信服务器,微信服务器再将接收到的消息返回给用户微信. 我们所需要做的:接收消息和返回消息 一.创建实体类 首先看文档http://mp.weixin.qq.com/wi

asp.net mvc 微信公众号token验证

本人的公众号要申请成为开发者,必须经过token认证.微信公众号的官方代码只列出了PHP代码的实例,明显是歧视.net用户.我用的asp.net mvc中的web api,结果调了好久都没有成功,最后发现只要下面几句即可: public void Get() { string temp = HttpContext.Current.Request.QueryString["echostr"]; HttpContext.Current.Response.Write(temp); HttpC

ASP.NET MVC 微信公众号支付,微信公众平台配置

微信公众号支付,首先要登录微信公众号进行配置: 第一步:配置网页授权域名 点击上图的修改则出现下面截图:进行修改(配置)网页授权的域名 第二步:配置支付授权目录 注意:支付授权目录的配置: 假设域名为:www.linjie.com 1.如果支付的页面在网站的根目录下,则配置格式为: http://域名/    例子:http://www.linjie.com/ 2.如果支付页面在网站的某个文件夹下,需要精确到文件夹:配置格式为:http://域名/文件夹名称/   例子支付页面在order文件下

.NET开发者如何愉快的进行微信公众号开发

此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:这篇文章只是一个如何提高开发效率的简单指导和记录,不会涉及具体的微信公众号开发内容. 就我理解,微信作为半个移动互联网入口,且已经在代替大量APP的趋势下,进行微信公众号开发是一个开发者必须面对的命运.那么.NET开发者如何高效的进行微信公众号开发呢?从我有限的经验来看,如下两个方面是特别需要解决的. 1,SDK的选择和使用 由于微信公众平台的访问接口庞大繁杂且基于HTTP API的,如果从底层开始写每一

C#微信公众号开发 -- (五)自定义菜单创建

公众号中,底部都是有自己定义的功能按钮,通过点击某个按钮来实现指定的业务逻辑操作. 下面就来说说这些按钮是怎样放到微信公众平台的,还是先来看看微信的官方解释: 请注意: 1.自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单. 2.一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替. 3.创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单, 如果菜单有更新,就会刷