using System; using System.Threading; using System.Text; using System.Text.RegularExpressions; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Configuration; using System.IO; using System.Net; using PortalComponent; using PortalComponent.UI; using PortalComponent.UI.Admin; using PortalComponent.UI.Admin.Resource; using PortalComponent.UI.Menu; using PortalComponent.UI.Page; using PortalComponent.UI.PortalInput; using PortalComponent.BL; using PortalComponent.BL.Admin; using PortalComponent.BL.Admin.Resource; namespace Portal.Admin.Resource { //================================================= //==用于百度 UEditor 的图片远程抓取页面, //==当插入非本地域名下的图片时候,将远程图片下载会本网站服务器,保存到 /Writable/Resource/_Random_ , //==接着再用这个本地服务器地址替换插入的远程图片地址。 //==锐商企业CMS - http://www.comsharp.com //================================================= public class UEditorGetRemoteImage : Portal.Admin.Template { //************************************************** //**本页的 Field (暂无) //************************************************** //************************************************** //**页面加载 //************************************************** private void Page_Load(object sender, System.EventArgs e) { //--------------------------------------------------- //--去掉本页的 Cache,本方法来自 Portal.Admin.Template //--------------------------------------------------- base.RemoveCache(); //--------------------------------------------------- //--图片下载到本站后保存到随机资源路径下 //--------------------------------------------------- string myStringRandomResourceLogicalPath=base.RandomResourceLogicalPath; //--------------------------------------------------- //--图片文件格式清单 //--------------------------------------------------- string[] myArrayStringFileType = {".gif",".png",".jpg",".jpeg",".bmp"}; //--------------------------------------------------- //--文件大小限制,单位kb //--------------------------------------------------- int myIntFileSize = 3000; //--------------------------------------------------- //--远程图片列表,来自发布的 upfile ,以 ue_separate_ue 分隔 //--------------------------------------------------- string myStringRemoteImageUrl = HttpContext.Current.Server.HtmlEncode(HttpContext.Current.Request["upfile"]); myStringRemoteImageUrl=myStringRemoteImageUrl.Replace("&", "&"); string[] myArrayStringRemoteImageUrl=Regex.Split(myStringRemoteImageUrl, "ue_separate_ue", RegexOptions.IgnoreCase); //--------------------------------------------------- //--该变量用来收集下载到本站后台的图片的地址,最后以 ue_separate_ue 连接起来后,以 json 格式返回 //--------------------------------------------------- ArrayList myArrayListTempName=new ArrayList(); //--------------------------------------------------- //--用来下载远程图片到本站后台的对象 //--------------------------------------------------- WebClient myWebClient=new WebClient(); HttpWebResponse myHttpWebResponse; //--------------------------------------------------- //--当前远程图片的地址 //--------------------------------------------------- string myStringCurrentRemoteImageUrl=""; //--------------------------------------------------- //--返回的图片列表 //--------------------------------------------------- string myStringReturnImageList=""; //--------------------------------------------------- //--开始 //--------------------------------------------------- try { //--------------------------------------------------- //--遍历所有远程图片地址 //--------------------------------------------------- for (int i = 0; i <= myArrayStringRemoteImageUrl.Length-1; i++) { //--------------------------------------------------- //--当前远程图片地址 //--------------------------------------------------- myStringCurrentRemoteImageUrl = myArrayStringRemoteImageUrl[i]; //--------------------------------------------------- //--判断是否 http //--------------------------------------------------- if (myStringCurrentRemoteImageUrl.Trim().ToLower().Substring(0, 7) != "http://") { myArrayListTempName.Add("not a http url!"); continue; } //--------------------------------------------------- //--格式验证 //--------------------------------------------------- if (Array.IndexOf(myArrayStringFileType, Path.GetExtension(myStringCurrentRemoteImageUrl).Trim().ToLower()) == -1) { myArrayListTempName.Add("not a image url!"); continue; } //--------------------------------------------------- //--对象 HttpWebResponse //--------------------------------------------------- myHttpWebResponse = (HttpWebResponse)WebRequest.Create(myStringCurrentRemoteImageUrl).GetResponse(); //--------------------------------------------------- //--进行 http 检测 //--------------------------------------------------- if (myHttpWebResponse.ResponseUri.Scheme.ToLower().Trim() != "http") { myArrayListTempName.Add("not a real http resource!"); continue; } //--------------------------------------------------- //--大小验证 //--------------------------------------------------- if (myHttpWebResponse.ContentLength > myIntFileSize * 1024) { myArrayListTempName.Add("file over size!"); continue; } //--------------------------------------------------- //--死链验证 //--------------------------------------------------- if (myHttpWebResponse.StatusCode != HttpStatusCode.OK) { myArrayListTempName.Add("dead link!"); continue; } //--------------------------------------------------- //--检查mime类型 //--------------------------------------------------- if (myHttpWebResponse.ContentType.IndexOf("image")==-1) { myArrayListTempName.Add("not a real image!"); continue; } //--------------------------------------------------- //--关闭 HttpWebResponse 对象 //--------------------------------------------------- myHttpWebResponse.Close(); //--------------------------------------------------- //--创建保存位置,位于随机资源路径下,以当前日期作为子路径 //--------------------------------------------------- string myStringSaveDirectory=String.Format("{0:####}-{1:0#}-{2:0#}",DateTime.Today.Year,DateTime.Today.Month,DateTime.Today.Day); string myStringSaveDirectoryLogicalPath=String.Format("{0}{1}",myStringRandomResourceLogicalPath,myStringSaveDirectory); string myStringSaveDirectoryPhysicalPath=HttpContext.Current.Server.MapPath(myStringSaveDirectoryLogicalPath); if (Directory.Exists(myStringSaveDirectoryPhysicalPath)==false) { Directory.CreateDirectory(myStringSaveDirectoryPhysicalPath); } //--------------------------------------------------- //保存 (使用 GUID 作为本站文件名) //--------------------------------------------------- string myStringSaveFile=string.Format("{0}{1}",System.Guid.NewGuid(),Path.GetExtension(myStringCurrentRemoteImageUrl)); myWebClient.DownloadFile(myStringCurrentRemoteImageUrl,string.Format(@"{0}\{1}",myStringSaveDirectoryPhysicalPath,myStringSaveFile)); myArrayListTempName.Add(string.Format("{0}/{1}",myStringSaveDirectoryLogicalPath,myStringSaveFile)); } } catch (Exception myException) { myArrayListTempName.Add(myException.Message); } finally { myWebClient.Dispose(); } //--------------------------------------------------- //--构造返回的 image 列表 (json) //--------------------------------------------------- myStringReturnImageList=string.Format("{{url:'{0}',tip:'success!',srcUrl:'{1}'}}",this.ConverToString(myArrayListTempName),myStringRemoteImageUrl); //--------------------------------------------------- //--保存成功后,返回 json 数据 //--------------------------------------------------- Response.ContentType = "text/plain"; Response.Write(myStringReturnImageList); } //************************************************** //**集合转换字符串 (以 UEditor 配置文件中指定的 ue_separate_ue 字符串作为分隔符) //************************************************** private string ConverToString(ArrayList pArrayListTempName) { //--------------------------------------------------- //--返回结果变量 //--------------------------------------------------- StringBuilder myStringBuilder=new StringBuilder(""); //--------------------------------------------------- //--返回结果 //--------------------------------------------------- for (int i = 0; i<= pArrayListTempName.Count-1; i++ ) { if (i==pArrayListTempName.Count-1) { myStringBuilder.AppendFormat("{0}",pArrayListTempName[i]); } else { myStringBuilder.AppendFormat("{0}ue_separate_ue",pArrayListTempName[i]); } } //--------------------------------------------------- //--返回结果 //--------------------------------------------------- return myStringBuilder.ToString(); } //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII #region Initialization //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII //************************************************** //**调用页面初始化 //************************************************** override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); } //************************************************** //**页面初始化 //************************************************** private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII #endregion //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII } }