赞
踩
官网下载地址 :GitHub - fex-team/ueditor: rich text 富文本编辑器
下载最新jsp版本导入项目,项目编辑器版本为1.4.3.3
导入到资源文件中,将demo、网页文件、jsp文件从资源目录中移除
页面引入相关js
- <script type="text/javascript" charset="utf-8" src="${springMacroRequestContext.contextPath}/ueditor/ueditor.config.js"></script>
- <script type="text/javascript" charset="utf-8" src="${springMacroRequestContext.contextPath}/ueditor/ueditor.all.min.js"> </script>
- <!--建议手动加在语言,避免在ie下有时因为加载语言失败导致编辑器加载失败-->
- <!--这里加载的语言文件会覆盖你在配置项目里添加的语言类型,比如你在配置项目里配置的是英文,这里加载的中文,那最后就是中文-->
- <script type="text/javascript" charset="utf-8" src="${springMacroRequestContext.contextPath}/ueditor/lang/zh-cn/zh-cn.js"></script>
实例化编辑器
- <div class="layui-form-item">
- <div class="layui-col-xs12">
- <label class="layui-form-label">内容</label>
- <div class="layui-input-block">
- <textarea id="editor" style="width: 90%;height: 250px" name="introduce" class="layui-textarea"></textarea>
- </div>
- </div>
- </div>
- <script>
- var ue = UE.getEditor('editor');
- </script>
编辑ueditor.config.js根据自己需求对编辑器进行配置。
上传文件后端路径一定要修改为自己的地址
- //为编辑器实例添加一个路径,这个不能被注释
- UEDITOR_HOME_URL: URL
-
- // 服务器统一请求接口路径
- , serverUrl: URL + "article/upload"
pom中引入json包,我这里引入的json版本为20220924
- <dependency>
- <groupId>org.json</groupId>
- <artifactId>json</artifactId>
- <version>20220924</version>
- </dependency>
将ueditor\jsp\lib\ueditor-1.1.2.jar包转到工程文件中
controller中配置文件路径,注意要在控制器中对返回路径进行处理,否则返回的是文件存储绝对路径。
- @Controller
- @RequestMapping("/person/ueditor")
- public class SystemDocUeditorController {
-
-
- @RequestMapping("/upload")
- @ResponseBody
- public String upload(HttpServletRequest request, HttpServletResponse response) throws Exception {
- request.setCharacterEncoding( "utf-8" );
- response.setHeader("Content-Type" , "text/html");
- String rootPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
- String result= new ActionEnter( request, rootPath+"/static" ).exec();
- String action = request.getParameter("action");
- rootPath=new File(rootPath+"/static/").toString();
- if( action!=null && (action.equals("listfile") || action.equals("listimage") ) ){
- rootPath = PathFormat.format(rootPath);
- result = result.replace(rootPath, "");
- }
- return result;
- }
-
- }
特别注意:路径错误会导致无法读取配置文件
正确配置效果
如果出现找到上传数据问题:
1、拦截器拦截掉了数据,放行路径
2、使用ServletFileUpload时需要关闭Spring Boot的默认配置 ,禁用MultipartResolverSpring提供的默认值,在配置文件中加入
spring.servlet.multipart.enabled=false
需要修改BinaryUploader类
- /**
- for(FileItemIterator iterator = upload.getItemIterator(request); iterator.hasNext(); fileStream = null) {
- fileStream = iterator.next();
- if (!fileStream.isFormField()) {
- break;
- }
- }
- **/
- FileItemIterator iterator = upload.getItemIterator(request);
- while (iterator.hasNext()) {
- fileStream = iterator.next();
- if (!fileStream.isFormField()) {
- break;
- }
- }
前端改造
添加删除按钮:
改造ueditor\dialogs\image\image.js
改造ueditor\dialogs\attachment\attachment.js
attachment的js中action=deletefile
- item.appendChild(img);
- item.appendChild(icon);
-
- /* 添加删除功能 Start*/
- item.appendChild($("<span class='delbtn' url='" + list[i].url + "'>X</span>").click(function() {
- var del = $(this);
- try{
- window.event.cancelBubble = true; //停止冒泡
- window.event.returnValue = false; //阻止事件的默认行为
- window.event.preventDefault(); //取消事件的默认行为
- window.event.stopPropagation(); //阻止事件的传播
- }finally{
- if(!confirm("确定要删除吗?")) return;
- $.post(editor.getOpt("serverUrl") + "?action=deleteimage", { "path": del.attr("url") }, function(result) {
- var json = eval('(' + result + ')');
- if (json.state == 'SUCCESS') {
- del.parent().remove();
- }
- else {
- alert(json.state);
- }
- });
- }
- })[0]);
- /* 添加删除功能 End*/
-
- this.list.insertBefore(item, this.clearFloat);
添加删除按钮样式:
ueditor\dialogs\image\image.css中添加样式
ueditor\dialogs\attachment\attachment.css中添加样式
- #online li .delbtn {
- position: absolute;
- top: 0;
- right: 0;
- border: 0;
- z-index: 3;
- color: #ffffff;
- display: inline;
- font-size: 12px;
- line-height: 10.5px;
- padding:3px 5px;
- text-align: center;
- background-color: #d9534f;
- }
后端改造
改造ueditor.ActionEnter,invoke()的switch(actionCode) {}插入代码
- case 7:
- conf = this.configManager.getConfig(actionCode);
- int start = this.getStartIndex();
- state = (new FileManager(conf)).listFile(start);
- break;
- case 8:
- state = (new DeleteFile(this.request,this.rootPath)).doExec();
- break;
- case 9:
- state = (new DeleteFile(this.request,this.rootPath)).doExec();
改造ueditor.ActionMap
- public final class ActionMap {
- public static final Map<String, Integer> mapping = new HashMap<String, Integer>() {
- {
- this.put("config", 0);
- this.put("uploadimage", 1);
- this.put("uploadscrawl", 2);
- this.put("uploadvideo", 3);
- this.put("uploadfile", 4);
- this.put("catchimage", 5);
- this.put("listfile", 6);
- this.put("listimage", 7);
- this.put("deleteimage", 8);
- this.put("deletefile", 9);
- }
- };
- public static final int CONFIG = 0;
- public static final int UPLOAD_IMAGE = 1;
- public static final int UPLOAD_SCRAWL = 2;
- public static final int UPLOAD_VIDEO = 3;
- public static final int UPLOAD_FILE = 4;
- public static final int CATCH_IMAGE = 5;
- public static final int LIST_FILE = 6;
- public static final int LIST_IMAGE = 7;
- public static final int DELETE_IMAGE = 8;
- public static final int DELETE_FILE = 9;
-
创建类 DeleteFile
-
- public class DeleteFile {
- private HttpServletRequest request = null;
- private String rootPath = null;
-
- public DeleteFile(HttpServletRequest request, String rootPath) {
- this.request = request;
- this.rootPath = rootPath;
- }
-
- public final State doExec() {
- State state = null;
- try {
- File file = new File(this.rootPath+this.request.getParameter("path"));
- if(!file.toString().contains(this.rootPath)){
- return new BaseState(false, 4);
- }
- if (file.exists() && file.isFile()) {
- if (file.delete()) {
- state = new BaseState(true);
- } else {
- state = new BaseState(false, "删除文件" + file.getName() + "失败!");
- }
- } else {
- state = new BaseState(false, file.getName()+"文件不存在!");
- }
- } catch (Exception var10) {
- return new BaseState(false, 4);
- }
-
- return state;
- }
- }
最终效果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。