精华内容
下载资源
问答
  • Eclise自带Javadoc功能,但是还是没有可视化效果,打什么HTML标签都需要手动输入,有没有插件可以像word一样编辑JavaDoc(其实也就是改改字号,划一下段落之类)?这样用起来就爽多了。 [b]问题补充...
  • Word Unscrambler-crx插件

    2021-04-06 19:22:43
    *该网站后面一个高速高效字谜解决引擎,该引擎可以快速将字母重新排列为可能正确单词。 *没有任何字符或字母限制。 您甚至可以输入两个字母或任意多个字母。 *它助于提高词汇量。 *该站点还可以在手机和几乎...
  • 1.4.2之后官方并没有做功能改动,1.4.2在word复制这块没有bug,其他版本会...所以回到Ueditor,由于官方没有维护,新neuditor 也不知道什么时候能支持word自动转存,只能自己想办法。 如果没有必要,不建议使用.

    1.4.2之后官方并没有做功能的改动,1.4.2在word复制这块没有bug,其他版本会出现手动无法转存的情况

    本文使用的后台是Java。前端为Jsp(前端都一样,后台如果语言不通得自己做 Base64编码解码)

    因为公司业务需要支持IE8 ,网上其实有很多富文本框,效果都很好。

    例如www.wangEditor.com  但试了一圈都不支持IE8 。

    所以回到Ueditor,由于官方没有维护,新的neuditor 也不知道什么时候能支持word自动转存,只能自己想办法。

    如果没有必要,不建议使用ueditor。我也是没有办法。

    改动过后的插件只适合IE8。

    这里要说明的一点是百度官方的编辑器不支持word图片批量转存,粘贴word后需要手动选择图片再进行上传一次操作。网上找到的大部分的示例都是这个操作。如果需要自动批量上传word图片的话可以使用WordPaster这个控件。

     

    1.IE设置

    在受信任站点里添加信任网站。

    这里本机测试使用的直接是   http://localhost

    因为需要读取客户端的文件,所以需要设置允许访问数据源。

    ActiveXObject设置可以去网上参考,这里不列举了。

    前面的

    到这里 IE 的准备工作完成了。

    修改ueditor.all.js关键代码

    14006行附近,如果是其他版本的ueditor,在功能正常的情况下,可以拷贝下面代码。

    var imgPath = attrs.src;

    var imgUrl = attrs.src;

    if (navigator.appName === 'Microsoft Internet Explorer') { //判断是否是IE浏览器

        if (navigator.userAgent.match(/Trident/i) && navigator.userAgent.match(/MSIE 8.0/i)) { //判断浏览器内核是否为Trident内核IE8.0

            var realPath = imgPath.substring(8, imgPath.length);

            var filename = imgPath.substring(imgPath.lastIndexOf('/') + 1, imgPath.length);

            var result = UploadForIE.saveAttachment(filename, realPath);

            if (result) {

                var json = eval('(' + result + ')');

                imgUrl = json.url;

            }

        }

    }

    img.setAttr({

     

        width: attrs.width,

        height: attrs.height,

        alt: attrs.alt,

        word_img: attrs.src,

        src: imgUrl,

        'style': 'background:url(' + (flag ? opt.themePath + opt.theme + '/images/word.gif': opt.langPath + opt.lang + '/images/localimage.png') + ') no-repeat center center;border:1px solid #ddd'

    })

     

    uploadForIE.js。

    var UploadForIE = {

        // 保存到xml附件,并且通过ajax 上传

        saveAttachment: function(upload_filename, localFilePath) {

            //后台接受图片保存的方法。

            var upload_target_url = "uploadImg";

            var strTempFile = localFilePath;

            // 创建XML对象,组合XML文档数据

            var xml_dom = UploadForIE.createDocument();

            xml_dom.loadXML('<?xml version="1.0" encoding="GBK" ?> <root/>');

            // 创建ADODB.Stream对象

            var ado_stream = new ActiveXObject("adodb.stream");

            // 设置流数据类型为二进制类型

            ado_stream.Type = 1; // adTypeBinary

            // 打开ADODB.Stream对象

            ado_stream.Open();

            // 将本地文件装载到ADODB.Stream对象中

            ado_stream.LoadFromFile(strTempFile);

            // 获取文件大小(以字节为单位)

            var byte_size = ado_stream.Size;

            // 设置数据传输单元大小为1KB

            var byte_unit = 1024;

            // 获取文件分割数据单元的数量

            var read_count = parseInt((byte_size / byte_unit).toString()) + parseInt(((byte_size % byte_unit) == 0) ? 0 : 1);

     

            // 创建XML元素节点,保存上传文件名称

            var node = xml_dom.createElement("uploadFilename");

            node.text = upload_filename.toString();

            var root = xml_dom.documentElement;

            root.appendChild(node);

     

            // 创建XML元素节点,保存上传文件大小

            var node = xml_dom.createElement("uploadFileSize");

            node.text = byte_size.toString();

            root.appendChild(node);

     

            // 创建XML元素节点,保存上传文件内容

            for (var i = 0; i < read_count; i++) {

                var node = xml_dom.createElement("uploadContent");

                // 文件内容编码方式为Base64

                node.dataType = "bin.base64";

                // 判断当前保存的数据节点大小,根据条件进行分类操作

                if ((parseInt(byte_size % byte_unit) != 0) && (i == parseInt(read_count - 1))) {

                    // 当数据包大小不是数据单元的整数倍时,读取最后剩余的小于数据单元的所有数据

                    node.nodeTypedValue = ado_stream.Read();

                } else {

                    // 读取一个完整数据单元的数据

                    node.nodeTypedValue = ado_stream.Read(byte_unit);

                }

                root.appendChild(node);

            }

     

            // 关闭ADODB.Stream对象

            ado_stream.Close();

            delete ado_stream;

            // 创建Microsoft.XMLHTTP对象

            // var xmlhttp = new ActiveXObject("microsoft.xmlhttp");

            var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHttp");

            // 打开Microsoft.XMLHTP对象

            xmlhttp.open("post", upload_target_url, false);

            // 使用Microsoft.XMLHTP对象上传文件

            xmlhttp.send(xml_dom);

            var state = xmlhttp.readyState;

            var success_state = true;

            if (state != 4) {

                success_state = false;

            }

            var result = xmlhttp.responseText;

     

            delete xmlhttp;

            return result;

        },

     

        // 创建DOMdocuemnt

        createDocument: function() {

            var xmldom;

            var versions = ["MSXML2.DOMDocument.6.0", "MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0", "MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument"],

            i,

            len;

            for (i = 0, len = versions.length; i < len; i++) {

                try {

                    xmldom = new ActiveXObject(versions[i]);

                    if (xmldom != null) break;

                } catch(ex) {

                    //跳过

                    alert("创建document对象失败!");

                }

            }

            return xmldom;

        }

    }

     

    UEditorAction保存图片方法

    @RequestMapping("/uploadImg")

        public void uploadADO(HttpServletRequest request, HttpServletResponse response) {

            String path1 = request.getContextPath();

            String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() +path1;

     

            String rootPath = request.getServletContext().getRealPath("/");

            // 设置数据传输单元大小为1KB

            int unit_size = 1024;

            // 初始化xml文件大小(以字节为单位)

            int xmlFileSize = 0;

            // 初始化上传文件名称(完整文件名)

            String xmlFilename = "";

            // 初始化上传文件保存路径(绝对物理路径)

            String xmlFilepath = "";

            // 声明文件存储字节数组

            byte[] xmlFileBytes = null;

            try {

                // 初始化 SAX 串行xml文件解析器

                SAXBuilder builder = new SAXBuilder();

                Document doc = builder.build(request.getInputStream());

                Element eRoot = doc.getRootElement();

                // 获取上传文件的完整名称

                Iterator it_name = eRoot.getChildren("uploadFilename").iterator();

                if (it_name.hasNext()) {

                    xmlFilename = ((Element) it_name.next()).getText();

                }

                //存放的相对路径目录

                String  relativePath = "/temp/"+EditorUtil.getToday()+"/";

                xmlFilepath = rootPath+ relativePath;

     

                // 获取上传文件的大小

                Iterator it_size = eRoot.getChildren("uploadFileSize").iterator();

                if (it_size.hasNext()) {

                    xmlFileSize = Integer.parseInt(((Element) it_size.next())

                            .getText());

                    if (xmlFileSize > 0) {

                        int unit_count = 0;

                        // 为存储文件内容的字节数组分配存储空间

                        xmlFileBytes = new byte[xmlFileSize];

                        // 循环读取文件内容,并保存到字节数组中

                        Iterator it_content = eRoot.getChildren("uploadContent")

                                .iterator();

                        while (it_content.hasNext()) {

                            // 初始化Base64编码解码器

                            BASE64Decoder base64 = new BASE64Decoder();

                            byte[] xmlNodeByteArray = base64

                                    .decodeBuffer(((Element) it_content.next())

                                            .getText());

                            if (xmlNodeByteArray.length >= unit_size) {

                                // 读取一个完整数据单元的数据

                                System.arraycopy(xmlNodeByteArray, 0, xmlFileBytes,

                                        unit_count * unit_size, unit_size);

                            } else {

                                // 读取小于一个数据单元的所有数据

                                System.arraycopy(xmlNodeByteArray, 0, xmlFileBytes,

                                        unit_count * unit_size, xmlFileSize

                                                % unit_size);

                            }

                            // 继续向下读取文件内容

                            unit_count++;

                        }

                    }

                }

     

                // 保存路径

                File path = new File(xmlFilepath);

                if(!path.exists()){

                    path.mkdirs();

                }

                // 保存文件 word粘贴图片的名称

                File file = new File(path,xmlFilename);

                // 创建文件输入输出流

                FileOutputStream fos = new FileOutputStream(file);

                // 写入文件内容

                fos.write(xmlFileBytes);

                fos.flush();

                // 关闭文件输入输出流

                fos.close();

     

                ReturnUploadImage rui = new ReturnUploadImage();

                rui.setTitle(xmlFilename);//这里需要设置文件名称如:xxx.jpg

                rui.setOriginal(xmlFilename);//这里需要设置文件名称如:xxx.jpg

                rui.setState("SUCCESS");

                rui.setUrl(basePath +relativePath+xmlFilename);

     

                JSONObject json = new JSONObject(rui);

                String result = json.toString();//这边就是为了返回给UEditor做的格式转换

                response.getWriter().write(result);

            } catch (Exception e) {

                e.printStackTrace();

            }

        }

    优化后的代码:

    upload.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

    <%@ page contentType="text/html;charset=utf-8"%>

    <%@ page import = "Xproer.*" %>

    <%@ page import="org.apache.commons.lang.StringUtils" %>

    <%@ page import="org.apache.commons.fileupload.*" %>

    <%@ page import="org.apache.commons.fileupload.disk.*" %>

    <%@ page import="org.apache.commons.fileupload.servlet.*" %>

    <%out.clear();

    /* 

        更新记录:

            2013-01-25 取消对SmartUpload的使用,改用commons-fileupload组件。因为测试发现SmartUpload有内存泄露的问题。

    */

    //String path = request.getContextPath();

    //String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

     

    String uname = "";//        = request.getParameter("uid");

    String upass = "";//        = request.getParameter("fid");

     

    // Check that we have a file upload request

    boolean isMultipart = ServletFileUpload.isMultipartContent(request);

    FileItemFactory factory = new DiskFileItemFactory();  

    ServletFileUpload upload = new ServletFileUpload(factory);

    //upload.setSizeMax(262144);//256KB

    List files = null;

    try

    {

        files = upload.parseRequest(request);

    }

    catch (FileUploadException e)

    {// 处理文件尺寸过大异常 

        out.println("上传文件异常:"+e.toString());

        return;

      

    }

     

    FileItem imgFile = null;

    // 得到所有上传的文件

    Iterator fileItr = files.iterator();

    // 循环处理所有文件

    while (fileItr.hasNext())

    {

        // 得到当前文件

        imgFile = (FileItem) fileItr.next();

        // 忽略简单form字段而不是上传域的文件域(<input type="text" />等)

        if(imgFile.isFormField())

        {

            String fn = imgFile.getFieldName();

            String fv = imgFile.getString();

            if(fn.equals("uname")) uname = fv;

            if(fn.equals("upass")) upass = fv;

        }

        else

        {

            break;

        }

    }

    Uploader up = new Uploader(pageContext,request);

    up.SaveFile(imgFile);

    String url = up.GetFilePathRel();

    out.write(url);

    response.setHeader("Content-Length",url.length()+"");//返回Content-length标记,以便控件正确读取返回地址。

    %>

     

    剩下的后台功能和js参考下载文件中的UEditorAction 和 uploadForIE.js。

    下面是我安装的依赖pom结构,可以根据自己的进行调整。

      <dependency>

                <groupId>com.baidu</groupId>

                <artifactId>ueditor</artifactId>

                <version>1.1.0</version>

            </dependency>

     

    基于springboot 和idea ,这里只提取了自动转存功能出来,功能还没测试,git代码没做公开,等后续测试好了再公开。

    可以先使用csdn下载查看代码。

    pom里引用了ueditor.jar

    需要根据各自情况安装jar包

    1.4.2中的jar包版本是1.1.0

    mvn install:install-file -DgroupId=com.baidu -DartifactId=ueditor -Dversion=1.1.0 -Dpackaging=jar -Dfile=\ueditor\jsp\lib\ueditor-1.1.0.jar

    运行

    UeditorApplication的main方法

    然后访问http://localhost:8088/ueditor/ 就可以测试了。

     

    完成后的效果:

    图片自动批量上传,不需要手动一张张选择图片上传,用户体验比百度ueditor自带的更好,传图效率更高。

     

    上传成功后,图片地址自动替换成服务器地址

     

    图片自动保存在服务器中

     

    详细资料可以参考这篇文章:

    http://blog.ncmem.com/wordpress/2019/08/12/ueditor-word%E5%9B%BE%E7%89%87%E8%BD%AC%E5%AD%98%E4%BA%A4%E4%BA%92/

     

    讨论群:223813913

    展开全文
  • 1.4.2之后官方并没有做功能改动,1.4.2在word复制这块没有bug,其他版本会...所以回到Ueditor,由于官方没有维护,新neuditor 也不知道什么时候能支持word自动转存,只能自己想办法。 如果没有必要,不建议使用.

    1.4.2之后官方并没有做功能的改动,1.4.2在word复制这块没有bug,其他版本会出现手动无法转存的情况

    本文使用的后台是Java。前端为Jsp(前端都一样,后台如果语言不通得自己做 Base64编码解码)

    因为公司业务需要支持IE8 ,网上其实有很多富文本框,效果都很好。

    例如www.wangEditor.com  但试了一圈都不支持IE8 。

    所以回到Ueditor,由于官方没有维护,新的neuditor 也不知道什么时候能支持word自动转存,只能自己想办法。

    如果没有必要,不建议使用ueditor。我也是没有办法。

    改动过后的插件只适合IE8。

    这里要说明的一点是百度官方的编辑器不支持word图片批量转存,粘贴word后需要手动选择图片再进行上传一次操作。网上找到的大部分的示例都是这个操作。如果需要自动批量上传word图片的话可以使用WordPaster这个控件。

     

    1.IE设置

    在受信任站点里添加信任网站。

    这里本机测试使用的直接是   http://localhost

    因为需要读取客户端的文件,所以需要设置允许访问数据源。

    ActiveXObject设置可以去网上参考,这里不列举了。

    前面的

    到这里 IE 的准备工作完成了。

    修改ueditor.all.js关键代码

    14006行附近,如果是其他版本的ueditor,在功能正常的情况下,可以拷贝下面代码。

    var imgPath = attrs.src;

    var imgUrl = attrs.src;

    if (navigator.appName === 'Microsoft Internet Explorer') { //判断是否是IE浏览器

        if (navigator.userAgent.match(/Trident/i) && navigator.userAgent.match(/MSIE 8.0/i)) { //判断浏览器内核是否为Trident内核IE8.0

            var realPath = imgPath.substring(8, imgPath.length);

            var filename = imgPath.substring(imgPath.lastIndexOf('/') + 1, imgPath.length);

            var result = UploadForIE.saveAttachment(filename, realPath);

            if (result) {

                var json = eval('(' + result + ')');

                imgUrl = json.url;

            }

        }

    }

    img.setAttr({

     

        width: attrs.width,

        height: attrs.height,

        alt: attrs.alt,

        word_img: attrs.src,

        src: imgUrl,

        'style': 'background:url(' + (flag ? opt.themePath + opt.theme + '/images/word.gif': opt.langPath + opt.lang + '/images/localimage.png') + ') no-repeat center center;border:1px solid #ddd'

    })

     

    uploadForIE.js。

    var UploadForIE = {

        // 保存到xml附件,并且通过ajax 上传

        saveAttachment: function(upload_filename, localFilePath) {

            //后台接受图片保存的方法。

            var upload_target_url = "uploadImg";

            var strTempFile = localFilePath;

            // 创建XML对象,组合XML文档数据

            var xml_dom = UploadForIE.createDocument();

            xml_dom.loadXML('<?xml version="1.0" encoding="GBK" ?> <root/>');

            // 创建ADODB.Stream对象

            var ado_stream = new ActiveXObject("adodb.stream");

            // 设置流数据类型为二进制类型

            ado_stream.Type = 1; // adTypeBinary

            // 打开ADODB.Stream对象

            ado_stream.Open();

            // 将本地文件装载到ADODB.Stream对象中

            ado_stream.LoadFromFile(strTempFile);

            // 获取文件大小(以字节为单位)

            var byte_size = ado_stream.Size;

            // 设置数据传输单元大小为1KB

            var byte_unit = 1024;

            // 获取文件分割数据单元的数量

            var read_count = parseInt((byte_size / byte_unit).toString()) + parseInt(((byte_size % byte_unit) == 0) ? 0 : 1);

     

            // 创建XML元素节点,保存上传文件名称

            var node = xml_dom.createElement("uploadFilename");

            node.text = upload_filename.toString();

            var root = xml_dom.documentElement;

            root.appendChild(node);

     

            // 创建XML元素节点,保存上传文件大小

            var node = xml_dom.createElement("uploadFileSize");

            node.text = byte_size.toString();

            root.appendChild(node);

     

            // 创建XML元素节点,保存上传文件内容

            for (var i = 0; i < read_count; i++) {

                var node = xml_dom.createElement("uploadContent");

                // 文件内容编码方式为Base64

                node.dataType = "bin.base64";

                // 判断当前保存的数据节点大小,根据条件进行分类操作

                if ((parseInt(byte_size % byte_unit) != 0) && (i == parseInt(read_count - 1))) {

                    // 当数据包大小不是数据单元的整数倍时,读取最后剩余的小于数据单元的所有数据

                    node.nodeTypedValue = ado_stream.Read();

                } else {

                    // 读取一个完整数据单元的数据

                    node.nodeTypedValue = ado_stream.Read(byte_unit);

                }

                root.appendChild(node);

            }

     

            // 关闭ADODB.Stream对象

            ado_stream.Close();

            delete ado_stream;

            // 创建Microsoft.XMLHTTP对象

            // var xmlhttp = new ActiveXObject("microsoft.xmlhttp");

            var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHttp");

            // 打开Microsoft.XMLHTP对象

            xmlhttp.open("post", upload_target_url, false);

            // 使用Microsoft.XMLHTP对象上传文件

            xmlhttp.send(xml_dom);

            var state = xmlhttp.readyState;

            var success_state = true;

            if (state != 4) {

                success_state = false;

            }

            var result = xmlhttp.responseText;

     

            delete xmlhttp;

            return result;

        },

     

        // 创建DOMdocuemnt

        createDocument: function() {

            var xmldom;

            var versions = ["MSXML2.DOMDocument.6.0", "MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0", "MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument"],

            i,

            len;

            for (i = 0, len = versions.length; i < len; i++) {

                try {

                    xmldom = new ActiveXObject(versions[i]);

                    if (xmldom != null) break;

                } catch(ex) {

                    //跳过

                    alert("创建document对象失败!");

                }

            }

            return xmldom;

        }

    }

     

    UEditorAction保存图片方法

    @RequestMapping("/uploadImg")

        public void uploadADO(HttpServletRequest request, HttpServletResponse response) {

            String path1 = request.getContextPath();

            String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() +path1;

     

            String rootPath = request.getServletContext().getRealPath("/");

            // 设置数据传输单元大小为1KB

            int unit_size = 1024;

            // 初始化xml文件大小(以字节为单位)

            int xmlFileSize = 0;

            // 初始化上传文件名称(完整文件名)

            String xmlFilename = "";

            // 初始化上传文件保存路径(绝对物理路径)

            String xmlFilepath = "";

            // 声明文件存储字节数组

            byte[] xmlFileBytes = null;

            try {

                // 初始化 SAX 串行xml文件解析器

                SAXBuilder builder = new SAXBuilder();

                Document doc = builder.build(request.getInputStream());

                Element eRoot = doc.getRootElement();

                // 获取上传文件的完整名称

                Iterator it_name = eRoot.getChildren("uploadFilename").iterator();

                if (it_name.hasNext()) {

                    xmlFilename = ((Element) it_name.next()).getText();

                }

                //存放的相对路径目录

                String  relativePath = "/temp/"+EditorUtil.getToday()+"/";

                xmlFilepath = rootPath+ relativePath;

     

                // 获取上传文件的大小

                Iterator it_size = eRoot.getChildren("uploadFileSize").iterator();

                if (it_size.hasNext()) {

                    xmlFileSize = Integer.parseInt(((Element) it_size.next())

                            .getText());

                    if (xmlFileSize > 0) {

                        int unit_count = 0;

                        // 为存储文件内容的字节数组分配存储空间

                        xmlFileBytes = new byte[xmlFileSize];

                        // 循环读取文件内容,并保存到字节数组中

                        Iterator it_content = eRoot.getChildren("uploadContent")

                                .iterator();

                        while (it_content.hasNext()) {

                            // 初始化Base64编码解码器

                            BASE64Decoder base64 = new BASE64Decoder();

                            byte[] xmlNodeByteArray = base64

                                    .decodeBuffer(((Element) it_content.next())

                                            .getText());

                            if (xmlNodeByteArray.length >= unit_size) {

                                // 读取一个完整数据单元的数据

                                System.arraycopy(xmlNodeByteArray, 0, xmlFileBytes,

                                        unit_count * unit_size, unit_size);

                            } else {

                                // 读取小于一个数据单元的所有数据

                                System.arraycopy(xmlNodeByteArray, 0, xmlFileBytes,

                                        unit_count * unit_size, xmlFileSize

                                                % unit_size);

                            }

                            // 继续向下读取文件内容

                            unit_count++;

                        }

                    }

                }

     

                // 保存路径

                File path = new File(xmlFilepath);

                if(!path.exists()){

                    path.mkdirs();

                }

                // 保存文件 word粘贴图片的名称

                File file = new File(path,xmlFilename);

                // 创建文件输入输出流

                FileOutputStream fos = new FileOutputStream(file);

                // 写入文件内容

                fos.write(xmlFileBytes);

                fos.flush();

                // 关闭文件输入输出流

                fos.close();

     

                ReturnUploadImage rui = new ReturnUploadImage();

                rui.setTitle(xmlFilename);//这里需要设置文件名称如:xxx.jpg

                rui.setOriginal(xmlFilename);//这里需要设置文件名称如:xxx.jpg

                rui.setState("SUCCESS");

                rui.setUrl(basePath +relativePath+xmlFilename);

     

                JSONObject json = new JSONObject(rui);

                String result = json.toString();//这边就是为了返回给UEditor做的格式转换

                response.getWriter().write(result);

            } catch (Exception e) {

                e.printStackTrace();

            }

        }

    优化后的代码:

    upload.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

    <%@ page contentType="text/html;charset=utf-8"%>

    <%@ page import = "Xproer.*" %>

    <%@ page import="org.apache.commons.lang.StringUtils" %>

    <%@ page import="org.apache.commons.fileupload.*" %>

    <%@ page import="org.apache.commons.fileupload.disk.*" %>

    <%@ page import="org.apache.commons.fileupload.servlet.*" %>

    <%out.clear();

    /* 

        更新记录:

            2013-01-25 取消对SmartUpload的使用,改用commons-fileupload组件。因为测试发现SmartUpload有内存泄露的问题。

    */

    //String path = request.getContextPath();

    //String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

     

    String uname = "";//        = request.getParameter("uid");

    String upass = "";//        = request.getParameter("fid");

     

    // Check that we have a file upload request

    boolean isMultipart = ServletFileUpload.isMultipartContent(request);

    FileItemFactory factory = new DiskFileItemFactory();  

    ServletFileUpload upload = new ServletFileUpload(factory);

    //upload.setSizeMax(262144);//256KB

    List files = null;

    try

    {

        files = upload.parseRequest(request);

    }

    catch (FileUploadException e)

    {// 处理文件尺寸过大异常 

        out.println("上传文件异常:"+e.toString());

        return;

      

    }

     

    FileItem imgFile = null;

    // 得到所有上传的文件

    Iterator fileItr = files.iterator();

    // 循环处理所有文件

    while (fileItr.hasNext())

    {

        // 得到当前文件

        imgFile = (FileItem) fileItr.next();

        // 忽略简单form字段而不是上传域的文件域(<input type="text" />等)

        if(imgFile.isFormField())

        {

            String fn = imgFile.getFieldName();

            String fv = imgFile.getString();

            if(fn.equals("uname")) uname = fv;

            if(fn.equals("upass")) upass = fv;

        }

        else

        {

            break;

        }

    }

    Uploader up = new Uploader(pageContext,request);

    up.SaveFile(imgFile);

    String url = up.GetFilePathRel();

    out.write(url);

    response.setHeader("Content-Length",url.length()+"");//返回Content-length标记,以便控件正确读取返回地址。

    %>

     

    剩下的后台功能和js参考下载文件中的UEditorAction 和 uploadForIE.js。

    下面是我安装的依赖pom结构,可以根据自己的进行调整。

      <dependency>

                <groupId>com.baidu</groupId>

                <artifactId>ueditor</artifactId>

                <version>1.1.0</version>

            </dependency>

     

    基于springboot 和idea ,这里只提取了自动转存功能出来,功能还没测试,git代码没做公开,等后续测试好了再公开。

    可以先使用csdn下载查看代码。

    pom里引用了ueditor.jar

    需要根据各自情况安装jar包

    1.4.2中的jar包版本是1.1.0

    mvn install:install-file -DgroupId=com.baidu -DartifactId=ueditor -Dversion=1.1.0 -Dpackaging=jar -Dfile=\ueditor\jsp\lib\ueditor-1.1.0.jar

    运行

    UeditorApplication的main方法

    然后访问http://localhost:8088/ueditor/ 就可以测试了。

     

    完成后的效果:

    图片自动批量上传,不需要手动一张张选择图片上传,用户体验比百度ueditor自带的更好,传图效率更高。

     

    上传成功后,图片地址自动替换成服务器地址

     

    图片自动保存在服务器中

     

    详细资料可以参考这篇文章:

    http://blog.ncmem.com/wordpress/2019/08/12/ueditor-word%E5%9B%BE%E7%89%87%E8%BD%AC%E5%AD%98%E4%BA%A4%E4%BA%92/

     

    讨论群:223813913

    展开全文
  • 记住,当您问“ Gee wiz,我想知道一天在多个网页上键入多少个单词时,我希望某种扩展名可以为我跟踪这些扩展名,并以某种半意义方式显示这些统计信息。”? 还记得吗 不? 那么太糟糕了,因为现在存在! ...
  • 编译好的jar包下载 提取码: ncdq Maven依赖: 在pom.xml中指定dependency,可用版本1.0、1.1、1.2、1.3、1.3.1: <dependencies> <dependency> <groupId>org.apdplat</groupId> <...
  • ihaessi-crx插件

    2021-04-03 16:30:57
    尽管如此,在Word识别上还有很多工作,如果人知道任何更好的词典,我很高兴听到你的反馈。 常问问题 问:徘徊在一个词,没有什么发生的? 答:通常这意味着这个词不在字典中。 ------------------ 2013年8月1日 -...
  • 请问一下有什么好的office文件预览插件或者好方法没有,或者是前端能够实现文件转pdf的方法(我希望得到这类方法)。(拒绝网上说的利用在线office预览的功能) ``` (0)" class="turn" :class="{grey: ...
  • 我还没有想出解决这个问题的好方法。 -显然已经一个名为[Jailbreak the Binary](https://chrome.google.com/webstore/detail/mmdlclbfhplmbjfefngjbicmelpbbdnh)叉子,但它似乎不存在了。 -我个人喜好并非所有...
  • phpbb论坛MOD插件

    2012-10-26 15:50:17
    此hack会为斑竹增加一个禁止控制的管理选项,让它们可以更好的管理版面。 Modulated Configuration Mod此mod是让mod作者外加额外的语言软件。 Page generation time for Admin only 这会在所有权信息上面显示...
  • *没有更多“您会话已超时。请重新登录。”。 如果表单已自动填写,并且出现该消息,则扩展名将自动登录。*右键单击并执行“另存为...”现在可用于PDF以外文档。 现在,您可以“另存为...” Word,PowerPoint和...
  • itxt好像写很方便但是我查了好久资料没有见到过关于读的好办法。经过一番选择还是折中点采用rtf最好,毕竟rtf是开源格式,不需要借助任何插件,只需基本IO操作外加编码转换即可。rtf格式文件表面看来和doc没啥区别,...
  • 可惜这些东西一直是静态,你有没有想过用简单方法让它们动起来。,今天你看完这篇文章就可以很容易地让它们在你电脑屏幕上飞舞。 这里我给大家介绍一款插件,名“爱屏保”。通过它,你可以很轻松地将文章...

     

    你的博客上是不是收集了很多优美的文章,你的相册里是不是珍藏了很多漂亮的图片。可惜这些东西一直是静态的,你有没有想过用简单的方法让它们动起来。好,今天你看完这篇文章就可以很容易地让它们在你的电脑屏幕上飞舞。

     

    这里我给大家介绍一款插件,名“爱屏保”。通过它,你可以很轻松地将文章、图片转换为可以直接运行的屏幕保护程序。你不需要学习什么复杂的软件操作技巧,也不需要记忆那些专用的动画指令,只要会用WORD就可以了。不要告诉我你不会WORD!纠正一点,这里的WORD不是微软的WORD,是WPS WORD,就是大名鼎鼎的金山WPS。可能你会说没用过,不会用。你这次可以完全相信我,它和MS WORD操作上完全一样,而且功能更多,使用也较MS WORD更方便,另外它只有28M,超级小。那“爱屏保”呢,它又是什么?听我慢慢道来。它正是WPS WORD上的一个插件,完美整合,貌似是WORD上一个工具按钮,只需点一下,选择一个你要保存的路径,一切就OK了,你的文字、照片就可以舞起来了。是不是太轻松了!是的,就是这么轻松。不过,你要是想做出精美的、够吸引人的屏保,也是需要花点心思的,至少你要好好排一排版。

     

     好了,废话就到这里,下面实战一下,眼见为实。

     

    第一步:安装

    如果你没有WPS,在这里(http://www.wps.cn/)可以下载到。仅20M 。

    或者直接点击下面按钮。

     然后,安装“爱屏保”插件,你可以在这里(http://www.wps.cn/addons/ThreadView/wdid-6600.htm)找到,只要点击安装就可以了(半分钟左右)。


    第二步:熟悉一下工作环境

     

     是不是很熟悉,呵呵,就是完美的MS WORD的山寨版。

    找到“爱屏保”按钮了吗?

     

    第三步:实例演示

    下面我将以两个实例向你介绍如何使用爱屏保。

    第一个是教你如何将一篇博客文章制成屏保,当然,只要是文章就可以了。

    我选择了我的一个好友写的一篇文章作演示。

    制作顺序:

    1. 找到你要的文章

    2. 将文章复制到WPS

    3. 进行必要的编辑(文字尽量大一点,并且进行必要的屏和行的设置,关于什么是屏和行,在爱屏保快速入门中有详细的介绍,你安装了爱屏保之后就可以找到)

    4. 生成屏保

    5. 运行。

    以上就是制造一个屏保程序的整个流程。

    下面看看操作录制图,用屏幕录制软件制作的,为了文件尽量小,采用的是Gif录制方式,所以看上去有点卡。

     

     

    可以在这里下载到完整实例:http://www.4shared-china.com/file/182950554/14da92c0/_online.html

     

     下面教你如何用图片制作屏保。

    同样,我也是用我的一位好友的相册作为演示。

    制作流程:

    1. 找到你要的图片

    2. 将图片下载或复制到WPS

    3. 进行必要的编辑(文字尽量大一点,并且进行必要的屏和行的设置)

    4. 生成屏保

    5. 运行。

    下面看看操作录制图

     

    可以在这里下载到完整实例:http://www.4shared-china.com/file/182950554/14da92c0/_online.html

     

     看到这里,是不是手痒痒了。赶紧下载试试吧。

     

    另外,爱屏保也可以用于以下方面:

    1.事件提示。比如将课程表、约会安排等做出屏幕保护程序,是不是提醒你重要事情。

    2.名人语录。时刻激励自己。

    3.离开留言。如果你是办公一族,这个对你应该比较有用。比如,你临时有事离开一会,可以在这期间有人找你,此时,你可以通过屏幕保护程序告知找你的人大概什么时候会回来。 

    。。。

    如果你发现了新奇的用法欢迎和我分享。 

    再分享一个贺岁大片屏保:http://www.4shared-china.com/file/182950557/8dd3c37a/_online.html

     

    PS:如果你使用了这个插件,觉得它并不怎么好,那就尽管骂吧,不过,一定要记得到这里来骂,因为只有这样它的作者才会知道有人给他提意见了。

    如果你觉得不错,那就分享它吧,越多人使用,会给我更大的动力去改进完善它的。

    谢谢你的支持!

     

    这个插件正处在成长阶段,你的任何建议对它的成长都会起到重要的作用。再次感谢你的支持!

     

    如果你制作出了不错的成果,欢迎向我分享。如果你在使用过程需到问题了,也欢迎随时和我沟通。

     

     爱屏保LOGO:

     

    当前最新版本:v1.0.0.5 更新时间:2009-12-28 

    上次更新版本:v1.0.0.0 升级时间:2009-12-24

     

     

    转载于:https://www.cnblogs.com/jingshui/archive/2009/12/28/1632373.html

    展开全文
  • 现在接到一个需求,要求在jsp里直接打开MS office文件,包含word excel ppt等(机器没装office也可...有没有什么免费的插件可以做到这种功能? 如果有,麻烦给出名字或下载地址,能附带demo,先谢谢啦!
  • OllyDBG汉化最新版

    2009-08-10 23:12:57
    如大家在使用中发现错误或有什么好的建议的话请发邮件告诉我,我会尽力修正。 06.02.09 修正版主要更新: 1、根据 dyk158 兄指出的汉化引起的bug,作出修正。 2、更新了几处翻译。 插件更新: 1、添加了看雪兄的 ...
  • 那么有没有这样一个工具,来尽可能地代替其中大部分工作呢?这就是我开发这个软件有缘由。 名字就叫:”斯卡乐分析报告生成器” 吧 ,好像有点长,你们有什么见意? 程序正在开发中。。。。给我提意见:i4color@...
  • ollydbg修改无bug版

    2008-12-31 22:05:55
    如大家在使用中发现错误或有什么好的建议的话请发邮件告诉我,我会尽力修正。 声明: 1.本汉化软件包内的所有英文及其他语言的源程序的版权归原作者(公司)所有。 2.本人不对使用本汉化软件造成的任何情况的...
  • ASP EXCEL导入SQL

    2013-01-23 01:17:24
     可见,当传统的CRM系统转换为SaaS服务后,其架构方面还是发生了不少的变动的,也只有这样的变动,才使得CRM能够在SaaS平台上更好的为客户所服务。  附:什么是REST架构  REST软件架构是当今世界上最成功的...
  • 了,干瘪瘪地讲了半天也没有什么意思,直接上图片: 1.支持链接(废话) 2.支持HTML(废话) 3.支持多语言代码高亮(吧这是CSS功劳) 4.支持图片(废话) 5.流程图: 关于Editor.md: 主要特性 支持“标准”...
  • 好的阅读体验,同步于掘金 推荐一个国外的 Big Data 入门学习网站:Simple and Easy Learning for Big Data & Analytics(要好好学English( ⊙ o ⊙ )啊!) 其实,不管是大数据还是其他知识的学习,我认为...
  • java开源包1

    千次下载 热门讨论 2013-06-28 09:14:34
    你定义Java源代码语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面支持,无缝集成IDE(语法着色,代码导航,重构等)语法和操作代码完全分离。最大限度地减少时间和费用开发...
  • java开源包12

    热门讨论 2013-06-28 10:14:45
    你定义Java源代码语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面支持,无缝集成IDE(语法着色,代码导航,重构等)语法和操作代码完全分离。最大限度地减少时间和费用开发...
  • Java资源包01

    2016-08-31 09:16:25
    你定义Java源代码语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面支持,无缝集成IDE(语法着色,代码导航,重构等)语法和操作代码完全分离。最大限度地减少时间和费用开发...
  • java开源包101

    2016-07-13 10:11:08
    你定义Java源代码语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面支持,无缝集成IDE(语法着色,代码导航,重构等)语法和操作代码完全分离。最大限度地减少时间和费用开发...
  • java开源包11

    热门讨论 2013-06-28 10:10:38
    你定义Java源代码语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面支持,无缝集成IDE(语法着色,代码导航,重构等)语法和操作代码完全分离。最大限度地减少时间和费用开发...
  • java开源包2

    热门讨论 2013-06-28 09:17:39
    你定义Java源代码语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面支持,无缝集成IDE(语法着色,代码导航,重构等)语法和操作代码完全分离。最大限度地减少时间和费用开发...
  • java开源包3

    热门讨论 2013-06-28 09:20:52
    你定义Java源代码语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面支持,无缝集成IDE(语法着色,代码导航,重构等)语法和操作代码完全分离。最大限度地减少时间和费用开发...
  • java开源包6

    热门讨论 2013-06-28 09:48:32
    你定义Java源代码语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面支持,无缝集成IDE(语法着色,代码导航,重构等)语法和操作代码完全分离。最大限度地减少时间和费用开发...
  • java开源包5

    热门讨论 2013-06-28 09:38:46
    你定义Java源代码语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面支持,无缝集成IDE(语法着色,代码导航,重构等)语法和操作代码完全分离。最大限度地减少时间和费用开发...

空空如也

空空如也

1 2 3
收藏数 47
精华内容 18
关键字:

有没有什么好的word插件