Simditor上传图片(ASP.NET+JS/Jquery)

  Simditor是我比较喜欢的富文本编辑器,他比较简洁,配置也很简单,Simditor官网都有,就不多说了。但是,他的那个图片上传图片没有反应,百度了一下,都是这个Java版的Simditor图片上传。看了下改成.NET也不知道用不用得成,索性自己写一个。那要怎么写呢?

  1.首先按照官网配置

	//富文本编辑器配置
        var editor = new Simditor({
            textarea: $('#<%=tb_Content.ClientID%>'),
            upload: {
                url: '../Upload/Notice/', //文件上传的接口地址
                params: null, //键值对,指定文件上传接口的额外参数,上传的时候随文件一起提交
                fileKey: 'fileDataFileName', //服务器端获取文件数据的参数名
                connectionCount: 3,
                leaveConfirm: '正在上传文件'
            },
            defaultImage: '../images/user_photo_max.png', //编辑器插入图片时使用的默认图片
        });

这时候,点击上传图片会出现如下界面

技术分享

然后就没有然后了……那怎么办呢?往下看

 

2.按F12查看“本地图片”和“外链图片-技术分享”的源代码

技术分享

 

技术分享

 

 

技术分享

为“本地上传”的上传控件添加 class="up-img",为外链图片的技术分享添加 class link-img。这里有人要问了,怎么添加?再往下看

 

3.找到simditor.js文件打开,“本地图片”就Ctrl+F5查找  accept="image/*",注意,一共有两个,第一个就是“本地图片”的,第二个是“外链图片”的,其他标签查找以此类推,找到之后添加类名。

技术分享

对于“外链图片”的这句把他注释了,然后一点技术分享就会弹出选择图片的界面,我们要把它改造成把文本框里面的链接图片添加到富文本编辑器中。

技术分享

好了,到这里准备工作就做完了,然后我们来理一理思路。我们希望点击“本地图片”并选择好图片之后文件自动上传到指定的文件夹,并显示到文本域中。而点击技术分享的时候,左边文本框里的链接图片也能够添加到文本域中。值得说一下的是,上传之后的图片点击后可以修改大小,修改弹出的文本框里面的值就行,光标离开文本框后自动修改。

4.做完了上面的功能,我们就可以为“.up-img”和“link-img”添加事件并拿到图片地址了,然后通过ajax方式上传到指定文件夹。

★“本地图片”事件JS代码

	//本地上传图片
        $(".up-img").change(function () {
            var path = $(this).val();
            var d = new Date();
            $.ajax({
                type: "POST",
                url: "../Ajax/Upload.ashx",
                data: {
                    fileurl: encodeURI(path),
                    uploadurl: encodeURI("../Upload/Notice/"),
                    time: d.getSeconds()
                    },
                    dataType: "text",
                    error: function () {
                        ZENG.msgbox.show('请求错误!', 1, 2000);
                    },
                    success: function (data) {
                        if (data.length >= 2) {
                            var url = data;
                            $(".simditor-body").html($(".simditor-body").html()+"<p><img src='" + url + "' style='max-width:800px;height:auto;'/></p>");//把图片添加到文本域中
                            editor.sync();//将编辑器的正文内容同步到 textarea 元素的 val 属性,返回值为编辑器正文的 HTML 内容。
                            ZENG.msgbox.show('上传成功!', 4, 2000);
                        } else if (data == "0") {
                            ZENG.msgbox.show('请选择要上传的图片!', 1, 2000);
                        } else if (data == "1") {
                            ZENG.msgbox.show('只能上传jpg/png/gif/bmp格式的图片!', 1, 2000);
                        } else if (data == "2") {
                            ZENG.msgbox.show('文件目前不可写!', 1, 2000);
                        }
                        else {
                            ZENG.msgbox.show('上传失败!', 5, 2000);
                        }
                    }
                });
        });

 

★“外链图片”事件JS代码

	//外链图片
        $(document).on("click", ".link-img", function () {
            $(".selected").attr("src", $(".image-src").val());//把文本框中的图片链接替换到默认图片的链接上
            $(".selected").css("max-width", "90%");
            $(".selected").css("height", "auto");
        });

 

★Ajax后台代码

using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;

namespace LovingTrip.Ajax
{
    /// <summary>
    /// Upload 的摘要说明
    /// 上传文件
    /// </summary>
    public class Upload : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            //文件路径
            string fileurl = context.Request.Form["fileurl"] == null ? "" : HttpUtility.UrlDecode(context.Request.Form["fileurl"]);
            //上传路径
            string uploadurl = context.Request.Form["uploadurl"] == null ? "" : HttpUtility.UrlDecode(context.Request.Form["uploadurl"]);
            if (fileurl == "" || uploadurl == "")
            {//请选择上传文件!
                context.Response.Write("0");
                return;
            }
            FileInfo file = new FileInfo(fileurl);
            string imgType = ConfigurationManager.AppSettings["imgType"].ToString();
            if (imgType.IndexOf(file.Extension.Substring(1))<0)
            {//验证文件格式
                context.Response.Write("1");
                return;
            }
            string fullPath = HttpContext.Current.Server.MapPath(uploadurl);//获取物理路径
            if (!Directory.Exists(fullPath))
            {
                Directory.CreateDirectory(fullPath);//如果不存在,则创建
            }
            string date = DateTime.Now.ToString("yyyyMMddHHmmss");
            string url = fullPath + date + file.Name;//完成路径
            //创建WebClient实例       
            WebClient myWebClient = new WebClient();
            //设定windows网络安全认证   方法1
            myWebClient.Credentials = CredentialCache.DefaultCredentials;
            ////设定windows网络安全认证   方法2
            //NetworkCredential cred = new NetworkCredential("UserName", "UserPWD");
            //CredentialCache cache = new CredentialCache();
            //cache.Add(new Uri("UploadPath"), "Basic", cred);
            //myWebClient.Credentials = cache;
            FileStream fs = new FileStream(fileurl, FileMode.Open, FileAccess.Read);
            BinaryReader r = new BinaryReader(fs);
            //使用UploadFile方法可以用下面的格式       
            //myWebClient.UploadFile(toFile, "PUT",fileNamePath);       
            byte[] postArray = r.ReadBytes((int)fs.Length);
            Stream postStream = myWebClient.OpenWrite(url, "PUT");
            if (postStream.CanWrite)
            {
                postStream.Write(postArray, 0, postArray.Length);
            }
            else
            {
                context.Response.Write("2");//文件目前不可写
                return;
            }
            postStream.Close();
            context.Response.Write(uploadurl+date + file.Name);//上传成功
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}



 


 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。