xhEditor在线编辑器使用实例
使用xhEditor的最大好处就是不用去处理烦人的HTML标签问题,研究了一天,记录备用
前台HTML:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Editor.aspx.cs" Inherits="xhEditor在线编辑器.Editor" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script src="Scripts/jquery-1.7.1.min.js" type="text/javascript"></script> <script src="Scripts/xhEditor/xheditor-1.2.1.min.js" type="text/javascript"></script> <script src="Scripts/xhEditor/xheditor_lang/zh-cn.js" type="text/javascript"></script> <script type="text/javascript"> $(function () { //初始化编辑器 $('#elem1').xheditor({ tools: 'full', width: '99.4%', height: '426px', forcePtag: false, upBtnText: '上传', upMultiple: 1, upLinkUrl: 'upload.aspx', upImgUrl: 'upload.aspx', upImgExt: 'jpg,jpeg,gif,png', upFlashUrl: 'upload.aspx', upFlashExt: 'swf', upMediaUrl: 'upload.aspx', upMediaExt: 'wmv,avi,wma,mp3,mid' }); }); //存值 function setValue() { $.ajax({ cache: false, url: "upload.ashx", data: { "text": $("#elem1").val() }, success: function (e) { //alert("success"); window.location.href = "Success.aspx"; } }); } //取值 function getText() { $.ajax({ cache: false, url: "getValue.ashx", success: function (e) { //alert(e); $("#getDIV").append(e); } }); } </script> </head> <body> <form id="form1" method="POST"> <div id="editorDIV" style="width: 900px"> <hr /> <br /> <textarea id="elem1" name="content" >test</textarea> <br /> <hr /> <input type="button" value="提交" onclick="setValue()" /> <input type="reset" name="reset" value="重置" /> <input type="button" onclick="getText()" value="取值"/> </div> <hr/> <div id = "getDIV"> </div> </form> </body> </html> <%--使用指南http://xheditor.com/manual/1--%>
处理后台页:
<%@ Page Language="C#" AutoEventWireup="true" CodePage="65001" %> <%@ Import Namespace="System" %> <%@ Import Namespace="System.Collections" %> <%@ Import Namespace="System.Configuration" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Web" %> <%@ Import Namespace="System.Web.Security" %> <%@ Import Namespace="System.Web.UI" %> <%@ Import Namespace="System.Web.UI.HtmlControls" %> <%@ Import Namespace="System.Web.UI.WebControls" %> <%@ Import Namespace="System.Web.UI.WebControls.WebParts" %> <%@ Import namespace="System.Data.SqlClient" %> <script runat="server"> /* * upload demo for c# .net 2.0 * * @requires xhEditor * @author Jediwolf<jediwolf@gmail.com> * @licence LGPL(http://www.opensource.org/licenses/lgpl-license.php) * * @Version: 0.1.4 (build 111027) * * 注1:本程序仅为演示用,请您务必根据自己需求进行相应修改,或者重开发 * 注2:本程序将HTML5上传与普通POST上传转换为byte类型统一处理 * */ protected void Page_Load(object sender, EventArgs e) { Response.Charset = "UTF-8"; // 初始化一大堆变量 string inputname = "filedata";//表单文件域name string attachdir = "upload"; // 上传文件保存路径,结尾不要带/ int dirtype = 1; // 1:按天存入目录 2:按月存入目录 3:按扩展名存目录 建议使用按天存 int maxattachsize = 2097152; // 最大上传大小,默认是2M string upext = "txt,rar,zip,jpg,jpeg,gif,png,swf,wmv,avi,wma,mp3,mid"; // 上传扩展名 int msgtype = 2; //返回上传参数的格式:1,只返回url,2,返回参数数组 string immediate = Request.QueryString["immediate"];//立即上传模式,仅为演示用 byte[] file; // 统一转换为byte数组处理 string localname = ""; string disposition = Request.ServerVariables["HTTP_CONTENT_DISPOSITION"]; string err = ""; string msg = "''"; if (disposition != null) { // HTML5上传 file = Request.BinaryRead(Request.TotalBytes); localname = Server.UrlDecode(Regex.Match(disposition, "filename=\"(.+?)\"").Groups[1].Value);// 读取原始文件名 } else { HttpFileCollection filecollection = Request.Files; HttpPostedFile postedfile = filecollection.Get(inputname); // 读取原始文件名 localname = postedfile.FileName; // 初始化byte长度. file = new Byte[postedfile.ContentLength]; // 转换为byte类型 System.IO.Stream stream = postedfile.InputStream; stream.Read(file, 0, postedfile.ContentLength); stream.Close(); filecollection = null; } if (file.Length == 0) err = "无数据提交"; else { if (file.Length > maxattachsize) err = "文件大小超过" + maxattachsize + "字节"; else { string attach_dir, attach_subdir, filename, extension, target; // 取上载文件后缀名 extension = GetFileExt(localname); if (("," + upext + ",").IndexOf("," + extension + ",") < 0) err = "上传文件扩展名必需为:" + upext; else { switch (dirtype) { case 2: attach_subdir = "month_" + DateTime.Now.ToString("yyMM"); break; case 3: attach_subdir = "ext_" + extension; break; default: attach_subdir = "day_" + DateTime.Now.ToString("yyMMdd"); break; } attach_dir = attachdir + "/" + attach_subdir + "/"; // 生成随机文件名 Random random = new Random(DateTime.Now.Millisecond); filename = DateTime.Now.ToString("yyyyMMddhhmmss") + random.Next(10000) + "." + extension; target = attach_dir + filename; //记录文件名和文件路径 Session["filename"] = filename; Session["route"] = target; try { CreateFolder(Server.MapPath(attach_dir)); System.IO.FileStream fs = new System.IO.FileStream(Server.MapPath(target), System.IO.FileMode.Create, System.IO.FileAccess.Write); fs.Write(file, 0, file.Length); fs.Flush(); fs.Close(); } catch (Exception ex) { err = ex.Message.ToString(); } // 立即模式判断 if (immediate == "1") target = "!" + target; target = jsonString(target); if (msgtype == 1) msg = "'" + target + "'"; else msg = "{'url':'" + target + "','localname':'" + jsonString(localname) + "','id':'1'}"; } } } file = null; Response.Write("{'err':'" + jsonString(err) + "','msg':" + msg + "}"); } string jsonString(string str) { str = str.Replace("\\", "\\\\"); str = str.Replace("/", "\\/"); str = str.Replace("'", "\\'"); return str; } string GetFileExt(string FullPath) { if (FullPath != "") return FullPath.Substring(FullPath.LastIndexOf('.') + 1).ToLower(); else return ""; } void CreateFolder(string FolderPath) { if (!System.IO.Directory.Exists(FolderPath)) System.IO.Directory.CreateDirectory(FolderPath); } </script>
保存到数据库:
using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Web; using System.Data; namespace xhEditor在线编辑器 { /// <summary> /// Summary description for getValue /// </summary> public class getValue : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; //context.Response.Write("Hello World"); string connStr = "server = .;database = Test1;uid=sa;pwd=password"; using (SqlConnection conn = new SqlConnection(connStr)) { string id = Guid.NewGuid().ToString(); string sqlstr = "select top 1 text from dbo.editor"; using (SqlCommand cmd = new SqlCommand(sqlstr, conn)) { conn.Open(); using (SqlDataAdapter dapter = new SqlDataAdapter(cmd)) { DataTable ds = new DataTable(); dapter.Fill(ds); context.Response.Write(ds.Rows[0][0].ToString()); } } } } public bool IsReusable { get { return false; } } } }
从数据库读取数据:
using System; using System.Data.SqlClient; using System.Linq; using System.Web; using System.Data; namespace xhEditor在线编辑器 { public partial class Success : System.Web.UI.Page { protected string text = string.Empty; protected void Page_Load(object sender, EventArgs e) { string connStr = "server = .;database = Test1;uid=sa;pwd=password"; using (SqlConnection conn = new SqlConnection(connStr)) { string id = Guid.NewGuid().ToString(); string sqlstr = "select top 1 text from dbo.editor"; using (SqlCommand cmd = new SqlCommand(sqlstr, conn)) { conn.Open(); using (SqlDataAdapter dapter = new SqlDataAdapter(cmd)) { DataTable ds = new DataTable(); dapter.Fill(ds); text = ds.Rows[0][0].ToString(); } } } } } }
层次结构:
数据库结构: