此贴为记录贴,,,,踩坑后,懂得了如何正确保存图像信息
/// <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
}
}