您的位置:首页 > 移动开发 > 微信开发

微信下载远程图片的公用方法

2016-06-17 10:32 621 查看
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Text.RegularExpressions;

namespace Wisdom.JPClient.WeiXin.Utility
{
public class CommonUtility
{
public static bool IsGUID(string str)
{
Match m = Regex.Match(str, @"^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$", RegexOptions.IgnoreCase);
if (m.Success)
{
//可以转换
//Guid guid = new Guid(str);
return true;
}
else
{
//不可转换
return false;
}
}

/// <summary>
/// 获取远程图片
/// </summary>
/// <param name="imgUrl">远程图片地址</param>
/// <param name="path">文件夹名</param>
/// <returns></returns>
public static int SaveImageFromWeb(string imgUrl, string Pic_Path_IDCard, ref string NewPicName)
{
NewPicName = DateTime.Now.ToString("yyyyMMddHHmmss") + new Random().Next(10, 100);
var aaa = Environment.CurrentDirectory;
string imgName = imgUrl.ToString().Substring(imgUrl.ToString().LastIndexOf("/") + 1);
if (Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("~/UploadFiles/" + Pic_Path_IDCard + "/")) == false)//如果不存在就创建file文件夹
{
Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("~/UploadFiles/" + Pic_Path_IDCard + "/"));
}
string path = System.Web.HttpContext.Current.Server.MapPath(String.Format("/UploadFiles/" + Pic_Path_IDCard + "/{0}", NewPicName));
//path = path + "//" + imgName;
string defaultType = ".jpg";
string[] imgTypes = new string[] { ".jpg", ".jpeg", ".png", ".gif", ".bmp" };
string imgType = imgUrl.ToString().Substring(imgUrl.ToString().LastIndexOf("."));
foreach (string it in imgTypes)
{
if (imgType.ToLower().Equals(it))
break;
if (it.Equals(".bmp"))
imgType = defaultType;
}
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(imgUrl);
request.UserAgent = "Mozilla/6.0 (MSIE 6.0; Windows NT 5.1; Natas.Robot)";
request.Timeout = 10000;
WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
if (response.ContentType.ToLower().StartsWith("image/"))
{
byte[] arrayByte = new byte[1024];
int imgLong = (int)response.ContentLength;
int l = 0;
// CreateDirectory(path);
FileStream fso = new FileStream(path, FileMode.Create);
while (l < imgLong)
{
int i = stream.Read(arrayByte, 0, 1024);
fso.Write(arrayByte, 0, i);
l += i;
}
fso.Close();
stream.Close();
response.Close();
return 1;
}
else
{
return 0;
}
}
catch (WebException)
{
return 0;
}
catch (UriFormatException)
{
return 0;
}
}

/// <summary>
/// 返回中文周几,
/// </summary>
/// <param name="y">年</param>
/// <param name="m">月</param>
/// <param name="d">日</param>
/// <returns></returns>
public static string CaculateChineseWeekDay(int y, int m, int d)
{
if (m == 1) m = 13;
if (m == 2) m = 14;
int week = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7 + 1;
string weekstr = "";
switch (week)
{
case 1: weekstr = "周一"; break;
case 2: weekstr = "周二"; break;
case 3: weekstr = "周三"; break;
case 4: weekstr = "周四"; break;
case 5: weekstr = "周五"; break;
case 6: weekstr = "周六"; break;
case 7: weekstr = "周日"; break;
}

return weekstr;
}

/// <summary>
/// 下载保存多媒体文件,返回多媒体保存路径
/// </summary>
/// <param name="ACCESS_TOKEN"></param>
/// <param name="MEDIA_ID"></param>
/// <returns></returns>
public static string GetMultimedia(string ACCESS_TOKEN, string MEDIA_ID, string fileName, ref string NewPicName)
{
NewPicName = DateTime.Now.ToString("yyyyMMddHHmmss") + new Random().Next(10, 100) + ".jpg";
string file = string.Empty;
string content = string.Empty;
string strpath = string.Empty;
string savepath = string.Empty;
string stUrl = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=" + ACCESS_TOKEN + "&media_id=" + MEDIA_ID;

if (Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("~/UploadFiles/" + fileName + "/")) == false)//如果不存在就创建file文件夹
{
Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("~/UploadFiles/" + fileName + "/"));
}

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(stUrl);

req.Method = "GET";
using (WebResponse wr = req.GetResponse())
{
HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse();

strpath = myResponse.ResponseUri.ToString();
WebClient mywebclient = new WebClient();
savepath = System.Web.HttpContext.Current.Server.MapPath(String.Format("/UploadFiles/" + fileName + "/{0}", NewPicName));
try
{
mywebclient.DownloadFile(strpath, savepath);
file = savepath;
}
catch (Exception ex)
{
savepath = ex.ToString();
}

}
return file;
}

///   <summary>
///   将指定字符串按指定长度进行截取并加上指定的后缀
///   </summary>
///   <param   name= "oldStr "> 需要截断的字符串 </param>
///   <param   name= "maxLength "> 字符串的最大长度 </param>
///   <param   name= "endWith "> 超过长度的后缀 </param>
///   <returns> 如果超过长度,返回截断后的新字符串加上后缀,否则,返回原字符串 </returns>
public static string StringTruncat(string oldStr, int maxLength, string endWith)
{
//判断原字符串是否为空
if (string.IsNullOrEmpty(oldStr))
return oldStr + endWith;

//返回字符串的长度必须大于1
if (maxLength < 1)
throw new Exception("返回的字符串长度必须大于[0] ");

//判断原字符串是否大于最大长度
if (oldStr.Length > maxLength)
{
//截取原字符串
string strTmp = oldStr.Substring(0, maxLength);

//判断后缀是否为空
if (string.IsNullOrEmpty(endWith))
return strTmp;
else
return strTmp + endWith;
}
return oldStr;
}

/// <summary>
/// post方法
/// </summary>
/// <param name="postUrl">url地址</param>
/// <param name="paramData">提交的ParamData对象</param>
/// <returns></returns>
public static string PostWebRequest<T>(string postUrl, T paramData)
{
string ret = string.Empty;
try
{
string str_Tem = JsonConvert.SerializeObject(paramData);//将对象转成json串
byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(str_Tem);
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
webReq.Method = "POST";
webReq.ContentType = " application/json; charset=utf-8";
webReq.ContentLength = byteArray.Length;
Stream newStream = webReq.GetRequestStream();
newStream.Write(byteArray, 0, byteArray.Length);//写入参数
newStream.Close();
HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
ret = sr.ReadToEnd();
sr.Close();
response.Close();
newStream.Close();
}
catch (Exception ex)
{

}
return ret;
}

/// <summary>
/// C#反序列化JSON
/// </summary>
/// <typeparam name="T">返回类型</typeparam>
/// <param name="jsonString">JSON字符串</param>
/// <returns></returns>
public static T JsonDeserialize<T>(string strJson)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson));
T objT = (T)ser.ReadObject(ms);
ms.Close();
return objT;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: