微信公众号开发根据mediaId获取永久素材图片,保存到本地

此贴为记录贴,,,,踩坑后,懂得了如何正确保存图像信息

 /// <summary>
 /// 根据mediaId获取永久素材图片,保存到本地
 /// </summary>
 /// <param name="mediaId"></param>
 public void GetMaterial(string mediaId)
 {
     if (string.IsNullOrWhiteSpace(access_token))
     {
         throw new Exception("access_token为空,与微信建立连接失败!");
     }
     var weChatMenuServerUrl =
         $@"https://api.weixin.qq.com/cgi-bin/material/get_material?access_token={access_token}";
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(weChatMenuServerUrl);
     request.Method = "POST";
     Dictionary<string, string> datas = new Dictionary<string, string>
         {
             {"media_id", mediaId}
         };
     var data = _ConvertKeyValuePayLoadToBytes(datas);
     if (data.Length > 0)
     {
         request.ContentLength = data.Length;
         using (var requestStream = request.GetRequestStream())
         {
             requestStream.Write(data, 0, data.Length);
             requestStream.Flush();
         }
     }
     using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
     {
         #region 保存文件到服务器
         string temp = mediaId + ".jpeg";
         string finalPath = BaseAppConfig.UploadedFilesFolder + temp;

         Stream responseStream = response.GetResponseStream();
         //StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);
         返回结果网页(html)代码
         //string content = sr.ReadToEnd();
         //var responseBytes = HttpHelper.GetContentBytes(response);
         //var jsonString = Encoding.UTF8.GetString(responseBytes);
         //此处的流不能操作多次,否则第二次操作的时候会报错
         BinaryReader br = new BinaryReader(responseStream);
         FileStream fs = new FileStream(finalPath, FileMode.Create, FileAccess.Write);

         const int buffsize = 1024;
         byte[] bytes = new byte[buffsize];
         int totalread = 0;
         int numread = buffsize;
         while (numread != 0)
         {

             numread = br.Read(bytes, 0, buffsize);
             totalread += numread;

             fs.Write(bytes, 0, numread);
         }

         br.Close();
         fs.Flush();
         fs.Close();
         response.Close();
         #endregion
     }
 }

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值