kindeditor编辑器图片水印

//upload_pic.ashx源码

<%@ webhandler Language="C#" class="edit_html_upload_pic" %>
using System;
using System.Collections;
using System.Web;
using System.IO;
using System.Globalization;
using LitJson;
using System.Web.SessionState;
using System.Drawing;  
using System.Drawing.Imaging;  
public class edit_html_upload_pic : IHttpHandler, IRequiresSessionState
{
    private HttpContext context;

    public void ProcessRequest(HttpContext context)
    {
        String aspxUrl = context.Request.Path.Substring(0, context.Request.Path.LastIndexOf("/") + 1);

        //每个用户文件夹独立IRequiresSessionState 
        String sessionUploadPath = String.Empty;
        if (HttpContext.Current.Session["edit_upload_folder"] != null)
        {
            sessionUploadPath = HttpContext.Current.Session["edit_upload_folder"].ToString() + "/";
        }

        //文件保存目录路径
        String savePath = "../../" + getConfigAppSettings("uploadFolder") + "/" + sessionUploadPath;
        //文件保存目录URL
        String saveUrl = aspxUrl + "../../" + getConfigAppSettings("uploadFolder") + "/" + sessionUploadPath;

        //定义允许上传的文件扩展名
        Hashtable extTable = new Hashtable();
        extTable.Add("image", "gif,jpg,jpeg,png,bmp");
        extTable.Add("flash", "swf,flv");
        extTable.Add("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
        extTable.Add("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");

        //最大文件大小
        int maxSize = 2000000;//2m
        this.context = context;

        HttpPostedFile imgFile = context.Request.Files["imgFile"];
        if (imgFile == null)
        {
            showError("请选择文件。");
        }

        String dirPath = context.Server.MapPath(savePath);
        if (!Directory.Exists(dirPath))
        {
            Directory.CreateDirectory(dirPath);
        }

        String dirName = context.Request.QueryString["dir"] != null ? context.Request.QueryString["dir"] : "image";
        String fileName = imgFile.FileName;
        String fileExt = Path.GetExtension(fileName).ToLower();

        if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(((String)extTable[dirName]).Split(','), fileExt.Substring(1).ToLower()) == -1)
        {
            showError("上传文件扩展名是不允许的扩展名。\n只允许" + ((String)extTable[dirName]) + "格式。");
        }
        if (dirName == "image")
        {
            if (imgFile.InputStream == null || imgFile.InputStream.Length > maxSize)
            {
                showError("上传文件大小超过限制。");
            }
            if (!isPic(imgFile))
            {
                showError("上传文件不合法!");
            }
        }





        //创建文件夹
        //dirPath += dirName + "/";
        //saveUrl += dirName + "/";
        if (!Directory.Exists(dirPath))
        {
            Directory.CreateDirectory(dirPath);
        }
        String ymd = DateTime.Now.ToString("yyyyMM", DateTimeFormatInfo.InvariantInfo);
        dirPath += ymd + "/";
        saveUrl += ymd + "/";
        if (!Directory.Exists(dirPath))
        {
            Directory.CreateDirectory(dirPath);
        }
        
        //edit_upload_fileName
        //string sessionUploadFileName = string.Empty;
        //if (HttpContext.Current.Session["edit_upload_fileName"] != null)
        //{
        //    sessionUploadFileName = HttpContext.Current.Session["edit_upload_fileName"].ToString();
        //}
        //String newFileName = sessionUploadFileName + DateTime.Now.ToString("yyyyMMddHHmmssffff", DateTimeFormatInfo.InvariantInfo) + fileExt;
        //String filePath = dirPath + newFileName;
        //imgFile.SaveAs(filePath);
        //String fileUrl = saveUrl + newFileName;

        //水印start
        String newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo);
        String filePath = dirPath + newFileName + fileExt;
        imgFile.SaveAs(filePath);
        String fileUrl = saveUrl + newFileName + fileExt;
        //添加文字水印
        Image image = System.Drawing.Image.FromFile(filePath);
        Graphics g = Graphics.FromImage(image);
        g.DrawImage(image, 0, 0, image.Width, image.Height);
        Font f = new Font("Verdana", 14);
        Brush b = new SolidBrush(Color.Red);
        string addText = "www.114390.com";
        g.DrawString(addText, f, b, 10, 10);
        g.Dispose();
        //保存加水印过后的图片,删除原始图片
        string newPath = dirPath + newFileName + "_new" + fileExt;
        image.Save(newPath);
        image.Dispose();
        if (File.Exists(filePath))
        {
            File.Delete(filePath);
        }
        fileUrl = saveUrl + newFileName + "_new" + fileExt;
        //水印end
        
        
        Hashtable hash = new Hashtable();
        hash["error"] = 0;
        hash["url"] = fileUrl;
        context.Response.AddHeader("Content-Type", "text/html; charset=UTF-8");
        context.Response.Write(JsonMapper.ToJson(hash));
        context.Response.End();
    }
    private string getConfigAppSettings(string keyName)
    {
        if (!string.IsNullOrEmpty(keyName))
        {
            return System.Configuration.ConfigurationManager.AppSettings[keyName];
        }
        return "";
    }
    private void showError(string message)
    {
        Hashtable hash = new Hashtable();
        hash["error"] = 1;
        hash["message"] = message;
        context.Response.AddHeader("Content-Type", "text/html; charset=UTF-8");
        context.Response.Write(JsonMapper.ToJson(hash));
        context.Response.End();
    }

    public bool IsReusable
    {
        get
        {
            return true;
        }
    }
    public bool isPic(HttpPostedFile imgFile)
    {
        int fileLen=imgFile.ContentLength;
        byte[] imgArray = new byte[fileLen];
        imgFile.InputStream.Read(imgArray, 0, fileLen);
        MemoryStream ms = new MemoryStream(imgArray);
        BinaryReader br = new BinaryReader(ms);
        string fileclass = "";
        byte buffer;
        try
        {
            buffer = br.ReadByte();
            fileclass = buffer.ToString();
            buffer = br.ReadByte();
            fileclass += buffer.ToString();
        }
        catch
        { }
        br.Close();
        ms.Close();
        //
        try
        {
            //读取上传的文件是否是图片对象,异常则删除图片
            System.Drawing.Image uploadedImg = System.Drawing.Image.FromStream(imgFile.InputStream);
            if (uploadedImg.Width < 1 || uploadedImg.Height < 1)
            {
                return false;
            }
            uploadedImg.Dispose();
        }
        catch
        {
            return false;
        }
        //
        FileExtension[] fileEx = { FileExtension.GIF, FileExtension.BMP, FileExtension.JPG, FileExtension.PNG};
        foreach (FileExtension fe in fileEx)
        {
            try
            {
                if (Int32.Parse(fileclass) == (int)fe)
                {
                    if (truePic(System.Text.Encoding.ASCII.GetString(imgArray)))
                    {
                        return true;
                    }
                    return false;
                }
            }
            catch
            { }

        }
        return false;
    }
    //判断上传文件中是否包含关键字
    public bool truePic(string str)
    {
        string sStr = ".getfolder|.createfolder|.deletefolder|.createdirectory|.deletedirectory|.saveas|wscript.shell|script.encode|server.|.createobject|execute|activexobject|language=|exec |insert |select |delete |update |truncate |declare |iframe |Response|Request(| Eval|Eval |Eval(|%Eval|script |using";
        string[] ck = sStr.Split('|');
        string strsql = str;
        for (int i = 0; i < ck.Length; i++)
        {
            if (str.IndexOf(ck[i]) != -1 || str.ToUpper().IndexOf(ck[i].ToUpper()) != -1)
            {
                return false;
            }
        }
        return true;
    }
    //文件类型
    public enum FileExtension
    {
        JPG = 255216,
        GIF = 7173,
        PNG = 13780,
        BMP = 6677,
        SWF = 6787,
        SWF2 = 7087,
        RAR = 8297,
        ZIP = 8075,
        DOC = 208207,
        DOCX = 8075,
        XLS = 208207,
        XLS2 = 198243,
        XLSX = 8075,
        //_7Z = 55122,
        // 255216 jpg;   
        // 7173 gif;   
        // 6677 bmp,   
        // 13780 png;   
        // 6787 swf   
        // 7790 exe dll,   
        // 8297 rar   
        // 8075 zip   
        // 55122 7z   
        // 6063 xml   
        // 6033 html   
        // 239187 aspx   
        // 117115 cs   
        // 119105 js   
        // 102100 txt   
        // 255254 sql  
        /*
        DOC = 208207,
        DOCX = 8075,
        XLS = 208207,
        XLSX = 8075,
        JS = 239187,
        TXT = 7067,
        MP3 = 7368,
        WMA = 4838,
        MID = 7784,
        */
    }
}

 

转载于:https://www.cnblogs.com/zhaozi/p/5616228.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: KindEditor编辑器可以通过以下步骤上传多张图片: 1. 点击编辑器中的“插入图片”按钮。 2. 在弹出的对话框中,选择“上传图片”选项卡。 3. 点击“选择文件”按钮,选择要上传的图片文件。 4. 重复步骤3,选择多张图片文件。 5. 点击“开始上传”按钮,等待上传完成。 6. 上传完成后,可以在“已上传图片”选项卡中查看已上传的图片。 7. 选中要插入的图片,点击“确定”按钮即可插入到编辑器中。 注意:上传多张图片时,需要等待每张图片上传完成后再选择下一张图片,否则可能会导致上传失败。 ### 回答2: kindeditor是一款非常常用的富文本编辑器,它不仅提供了基本的文本编辑功能,而且还支持上传多张图片的功能。下面就详细介绍一下如何使用kindeditor上传多张图片。 1. 准备工作 首先,在使用kindeditor上传多张图片之前,我们需要先准备好以下内容: ① kindeditor编辑器文件 ② kindeditor上传图片的处理程序文件,这个一般是后台开发人员编写的 ③ 存储上传图片的文件夹,这个一般由后台开发人员在处理程序中设置。 2. 设置kindeditor编辑器 在前端页面中,我们需要先引入kindeditor编辑器的相关文件。这些文件一般包括kindeditor.js和kindeditor.css等。引入之后,我们需要对kindeditor进行一些基本设置,如设置编辑器的宽度、高度等。同时,还需要在配置文件中设置上传图片的选项。 其中,设置上传图片的选项需要设置上传图片的处理程序地址、允许上传的图片类型、最大可以上传的图片大小、是否可以上传多张图片等。 3. 编写后端处理程序 在上传图片的处理程序中,我们一般需要在程序中编写以下基本功能: ① 判断上传的文件是否合法,包括文件类型是否允许上传、文件大小是否在规定范围内等。 ② 将上传的图片保存到指定文件夹中。 ③ 返回上传结果,一般是返回上传的图片地址或者上传失败的原因等。 4. 使用 在前端页面中,我们可以通过点击上传图片按钮来触发上传图片的功能。在点击上传图片按钮后,会弹出选择图片的对话框,我们可以选择多张图片,然后分别进行上传。上传完成后,可以在编辑器中看到上传的图片。 总的来说,kindeditor上传多张图片的功能非常实用,可以让我们的文章或网站更加丰富和有趣。同时,对于后端开发人员来说,也需要注意上传图片的文件类型和大小等问题,以确保上传图片的安全性和稳定性。 ### 回答3: KindEditor是一款基于jQuery和Zlib的网页富文本编辑器,它支持表格、混合开发、超过40种已配置的插件、代码自动提示与补全。在KindEditor中,用户可以方便地插入各类多媒体元素,包括图片、音视频等。也就是说,在KindEditor中上传多张图片非常容易。 具体的上传过程可以分为以下几个步骤: 1. 在前端页面中添加一个文件上传控件,例如: <input type="file" id="file" name="file" multiple/> 其中,multiple属性表示可以选择多个文件进行上传。 2. 在JavaScript中添加上传代码。使用KindEditor自带的uploadJson接口可以实现多张图片的上传: KindEditor.ready(function(K) { var editor = K.editor({ // 设置上传接口 uploadJson: '/upload_json.php', fileManagerJson: '/file_manager_json.php' }); K('#upload_img_btn').click(function() { editor.loadPlugin('multiimage', function() { // 打开上传多张图片的窗口 editor.plugin.multiImageDialog({ clickFn: function(data) { // 上传成功后执行的回调函数 } }); }); }); }); 在上述代码中,uploadJson属性设置上传接口,multiImageDialog方法打开多张图片上传的窗口。 3. 在服务器端编写PHP代码处理上传请求。具体的实现方式因不同的后端语言而异,在PHP中,可以使用$_FILE数组来处理上传文件。例如: if(!empty($_FILES['file']['name'])) { $fileArr = $_FILES['file']; for($i=0; $i<count($fileArr['name']); $i++) { $tmp_name = $fileArr['tmp_name'][$i]; $name = $fileArr['name'][$i]; // 保存文件到指定目录 move_uploaded_file($tmp_name, 'uploads/'.$name); $urlArr[] = 'uploads/'.$name; } echo json_encode(array('error' => 0, 'data' => $urlArr)); } 其中,$fileArr为上传的文件数组,$urlArr保存上传成功后每个文件的URL地址。 综上所述,KindEditor编辑器上传多张图片的步骤包括前端文件上传控件的添加、JavaScript上传代码的编写以及后端服务器代码的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值