/******************************************************************************* * iNethinkCMS - 网站内容管理系统 * Copyright (C) 2012-2013 inethink.com * * @author jackyang <69991000@qq.com> * @website http://cms.inethink.com * @version 1.3.6.0 (2013-08-14) * * This is licensed under the GNU LGPL, version 3.0 or later. * For details, see: http://www.gnu.org/licenses/gpl-3.0.html *******************************************************************************/ using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; using System.Net; using iNethinkCMS.Web.UI; namespace iNethinkCMS.Web.inc { public partial class upload_remote : Admin_BasePage { iNethinkCMS.BLL.BLL_iNethinkCMS_Upload bll = new iNethinkCMS.BLL.BLL_iNethinkCMS_Upload(); iNethinkCMS.Model.Model_iNethinkCMS_Upload model = new iNethinkCMS.Model.Model_iNethinkCMS_Upload(); private string upExt; //上传扩展名 private string attachDir; //上传文件保存路径,结尾不要带/ private int dirType; // 1:按天存入目录 2:按月存入目录 3:按扩展名存目录 建议使用按天存 private int maxAttachSize; // 最大上传大小,默认是2M protected void Page_Load(object sender, EventArgs e) { CheckUserPower("a"); upExt = ",jpg,jpeg,gif,png,bmp,"; attachDir = "/upload"; dirType = 1; maxAttachSize = Convert.ToInt32(siteConfig.UpFileMaxSize) * 1024 * 1024; Response.Charset = "UTF-8"; string[] arrUrl = Request["urls"].Split('|'); for (int i = 0; i < arrUrl.Length; i++) { string localUrl = saveRemoteImg(arrUrl[i]); if (localUrl != "") { arrUrl[i] = localUrl;//有效图片替换 } } Response.Write(String.Join("|", arrUrl)); Response.End(); } string saveRemoteImg(string sUrl) { byte[] fileContent; string sExt; string sFile; if (sUrl.StartsWith("data:image")) { // base64编码的图片,可能出现在firefox粘贴,或者某些网站上,例如google图片 int pstart = sUrl.IndexOf('/') + 1; sExt = sUrl.Substring(pstart, sUrl.IndexOf(';') - pstart).ToLower(); if (upExt.IndexOf("," + sExt + ",") == -1) { return ""; } fileContent = Convert.FromBase64String(sUrl.Substring(sUrl.IndexOf("base64,") + 7)); } else { // 图片网址 sExt = sUrl.Substring(sUrl.LastIndexOf('.') + 1).ToLower(); if (upExt.IndexOf("," + sExt + ",") == -1) { return ""; } fileContent = getUrl(sUrl); } if (fileContent == null) { return ""; } //超过最大上传大小忽略 if (fileContent.Length > maxAttachSize) { return ""; } //有效图片保存 sFile = getLocalPath(sExt); File.WriteAllBytes(Server.MapPath(sFile), fileContent); //存入数据库 model.UpType = 0; model.Aid = 0; model.Cid = 0; model.Dir = sFile; model.Ext = sExt; model.Time = DateTime.Now; bll.Add(model); return sFile; } string getLocalPath(string extension) { string attach_dir, attach_subdir, filename; switch (dirType) { case 1: attach_subdir = "day_" + DateTime.Now.ToString("yyyyMMdd"); break; case 2: attach_subdir = "month_" + DateTime.Now.ToString("yyMM"); break; default: attach_subdir = "ext_" + extension; break; } attach_dir = attachDir + "/" + attach_subdir + "/"; if (!Directory.Exists(Server.MapPath(attach_dir))) { Directory.CreateDirectory(Server.MapPath(attach_dir)); } // 生成随机文件名 Random random = new Random(DateTime.Now.Millisecond); filename = "r" + DateTime.Now.ToString("yyyyMMddhhmmss") + random.Next(10000) + "." + extension; return attach_dir + filename; } byte[] getUrl(string sUrl) { WebClient wc = new WebClient(); try { return wc.DownloadData(sUrl); } catch { return null; } } } }