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;
            }
        }
    }
}
时间: 2024-10-08 23:25:57

Simditor上传图片(ASP.NET+JS/Jquery)的相关文章

异步上传图片,光用jquery不行,得用jquery.form.js插件

异步上传图片,光用jquery不行,得用jquery.form.js插件,百度一下下载这个插件,加jquery,引入就可以了 <form id="postbackground" method="POST" action="#" enctype="multipart/form-data"> <input name="upload" type="file" id="

10分钟学会基于ASP.NET的 JQuery实例 (转)

本文介绍如何在ASP.NET(ASP.NET/AJAX)里使用基于JQuery的AJAX技术.(源代码下载见最后) 在使用JQuery前,请到www.jquery.com下载最新版本的js代码,然后再代码里使用 <script src="_scripts/jQuery-1.2.6.js" type="text/javascript"></script>即可,当然,由于微软已经把JQuery集成到VS里,所以你可以到WWW.ASP.NET/aj

Asp.net使用jQuery实现数据绑定与分页

使用jQuery来实现Gridview, Repeater等服务器端数据展示控件的数据绑定和分页.本文的关注重点是数据如何实现数据绑定. Content jQuery的强大和可用性使得其迅速的流行起来.微软也发布了一个补丁使得VS支持对jQuery的智能感应.由于Gridview,Repeater等控件的复杂性,使得几乎无法通过javascript在客户端对其进行赋值.但是我们又不想放弃这些控件提供的强大功能和便利性,尤其是我们已经习惯了使用这些控件来展示大量的数据.因此如果能把jQuery和G

asp.net MVC3 + JQuery 的ajax简单使用

一直都没有使用过JQuery,更没使用过JQuery的ajax支持带来的方便,今天试了一下,真是减少了很多工作量,使用方法也比较简单 这里先记下来,以后使用时可以再拿着用. 本应用中,本来是准备使用长链接的方式,在server端有错误消息产生时,能实时返回错误消息.可在使用长链接时,因为.net功底 不够,以失败告终!所以采用了javascript中间隔查询的方法. 页面代码如下: Java代码   @{ ViewBag.Title = "ErrorMonitor"; } <sc

asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作

/****** Object: 新闻表 Script Date: 2017/9/2 星期六 15:11:12 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[SITE_ARTICLE]( [ID] [nvarchar](36) NOT NULL,--ID [TITLE] [nvarchar](100) NULL,--新闻标题 [COLID] [nvarchar](36) NULL,--所属栏

asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发4- 后台模板html页面创建

上一篇教程<asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发>完成了本项目的登录模块,登录后就需要进入后台管理首页了,需要准备一个后台模板,本文主要讲解如何创建这个后台模板,本文创建的后台模板不集成到项目内部,只是静态html页面.后台模板是系统开发必须的,一般小公司有个3套后台模板就够用了.本项目后台模板主要是jquery easyui插件创建的,不需要美工设计就可以创建出来,而且效果还可以,具体效果图如下: 这个版面的缺点是,只能适应2层

js jquery插入元素后事件会被注销

  js jquery插入元素后事件会被注销 document.body.innerHTML += <div id="dd">test</div>  //这个会注销事件 $(document.body).append(str);//使用这个 也可以绑定事件. 例子: //快捷键双击 $(".app_shortcut_item").dblclick(function () { var id = $(this).attr("id&quo

微信开发订阅号(ASP.NET MVC4+jquery mobile+AppHarbor发布)

首先应该去微信公众平台注册一个账号,因为我是用的个人,所以只能注册订阅号,然后需要提供身份证照片,这些大家慢慢折腾.然后在微信管理面板中选择高级功能,进入开发者模式. 在服务器配置中需要提供最重要的url,用来接收微信发过来的消息和回复消息,token这个随便填一个就行了,主要是用来验证消息来源. 如果你是java php开发者,那么你可以选google AppEngin 或者sina app engine 来部署你的应用,但是很不幸,我是.net,这里我们使用国外的AppHarbor,appH

一个基于html,css,js,JQuery的登录界面

github地址:https://github.com/BgirlStar/myTest_final 任务需求: 可进行部分改变,但颜色和风格要保持不变. 完成点:1.login按钮的隐藏与弹出 2.弹出框样式(三角,阴影,圆角) 3.输入框图片和默认字符 4.背景按钮渐变 5.js内置用户名密码,点击登录后弹出对话框 完成后图片: 加入jquery插件 实现了弹出框的隐藏与弹出,代码见js/index.js js/jquery.js 内置email和密码 代码见js/need.js 素材包见j