ueditor跨域上传图片文件(基于jsp框架、tomcat)

来源:互联网 发布:知乎 约翰事件 编辑:程序博客网 时间:2024/06/05 06:15

额,好久没有用到ueditor了,因为现在的相关工作很少涉及到富文本编辑;最近临时带了一个项目,里面要用到富文本编辑器,而且文件要统一上传到文件服务器上保存;应为以前用过ueditor就试着在网上着一些跨域保存的资料,找了半天都是只言片语说不清楚,最后摸索了两天,综合了网上的很多办法,结合自己的一些改进,有了这篇文章。

一、文件上传项目的相关配置:


1、把下载的ueditor解压到项目的WebRoot目录下;如下图所示:


2.导入ueditor的jar包到项目中,下载的jar是有问题的,需要自己编译一下,我把修改后的jar包上传了,下载地址为:http://download.csdn.net/download/u012613903/9741412

3.修改config.json(ueditor/jsp/config.json)

修改内容如下:

/* 前后端通信相关的配置,注释只允许使用多行方式 */{    /* 上传图片配置项 */    "imageActionName": "uploadimage", /* 执行上传图片的action名称 */    "imageFieldName": "upfile", /* 提交的图片表单名称 */    "imageMaxSize": 51200000, /* 上传大小限制,单位B */    "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp",".swf"], /* 上传图片格式显示 */    "imageCompressEnable": true, /* 是否压缩图片,默认是true */    "imageCompressBorder": 1600, /* 图片压缩最长边限制 */    "imageInsertAlign": "none", /* 插入的图片浮动方式 */    "imageUrlPrefix": "http://localhost:9999/ods", /* 图片访问路径前缀 */    "imagePathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */                                /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */                                /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */                                /* {time} 会替换成时间戳 */                                /* {yyyy} 会替换成四位年份 */                                /* {yy} 会替换成两位年份 */                                /* {mm} 会替换成两位月份 */                                /* {dd} 会替换成两位日期 */                                /* {hh} 会替换成两位小时 */                                /* {ii} 会替换成两位分钟 */                                /* {ss} 会替换成两位秒 */                                /* 非法字符 \ : * ? " < > | */                                /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */    /* 涂鸦图片上传配置项 */    "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */    "scrawlFieldName": "upfile", /* 提交的图片表单名称 */    "scrawlPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */    "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */    "scrawlUrlPrefix": "", /* 图片访问路径前缀 */    "scrawlInsertAlign": "none",    /* 截图工具上传 */    "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */    "snapscreenPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */    "snapscreenUrlPrefix": "", /* 图片访问路径前缀 */    "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */    /* 抓取远程图片配置 */    "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"],    "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */    "catcherFieldName": "source", /* 提交的图片列表表单名称 */    "catcherPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */    "catcherUrlPrefix": "", /* 图片访问路径前缀 */    "catcherMaxSize": 2048000, /* 上传大小限制,单位B */    "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */    /* 上传视频配置 */    "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */    "videoFieldName": "upfile", /* 提交的视频表单名称 */    "videoPathFormat": "/ueditor/jsp/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */    "videoUrlPrefix": "http://localhost:9999/ods", /* 视频访问路径前缀 */    "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */    "videoAllowFiles": [        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */    /* 上传文件配置 */    "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */    "fileFieldName": "upfile", /* 提交的文件表单名称 */    "filePathFormat": "/ueditor/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */    "fileUrlPrefix": "http://localhost:9999/ods", /* 文件访问路径前缀 */    "fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */    "fileAllowFiles": [        ".png", ".jpg", ".jpeg", ".gif", ".bmp",        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",        ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",        ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"    ], /* 上传文件格式显示 */    /* 列出指定目录下的图片 */    "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */    "imageManagerListPath": "/ueditor/jsp/upload/image/", /* 指定要列出图片的目录 */    "imageManagerListSize": 20, /* 每次列出文件数量 */    "imageManagerUrlPrefix": "http://localhost:9999/ods", /* 图片访问路径前缀 */    "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */    "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */    /* 列出指定目录下的文件 */    "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */    "fileManagerListPath": "/ueditor/jsp/upload/file/", /* 指定要列出文件的目录 */    "fileManagerUrlPrefix": "http://localhost:9999/ods", /* 文件访问路径前缀 */    "fileManagerListSize": 20, /* 每次列出文件数量 */    "fileManagerAllowFiles": [        ".png", ".jpg", ".jpeg", ".gif", ".bmp",        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",        ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",        ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"    ] /* 列出的文件类型 */}


关注上文中的红色字体,我所修改的就是要给图片和文件加的前缀;改前缀指向实际保存图片的项目。



4.在图片上传的项目(使用ueditor的项目)中的jsp页面中引入ueditor的js


5.初始化ueditor,并加入响应的修改,修改后的初始化ueditor的语句如下:




二、文件服务器端项目的编写与配置

1、项目整体配置如下(是一个最简单的spring项目):


其中UeditorController为图片上传保存的controller类、CORSFilter为处理出现跨域问题的过滤器、UUIDGenerater是一个生成没有-的UUID的工具类(因为文件要通过url来下载的话就不能出现中文,所以这里我偷懒直接用uuid来保存文件名了);files文件是保存上传的文件的地方。


2.UeditorController中上传文件的逻辑实现

import java.io.File;import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;import com.emep.ods.util.UUIDGenerater;@Controller@RequestMapping("/ueditor")public class UeditorController {@RequestMapping("/testfile")@ResponseBodypublic Map<String, Object> testFile(@RequestParam(value = "upfile", required = false) MultipartFile file,HttpServletRequest request) {//value的名字一定要叫upfile,这是ueditor写好的参数名称String path = request.getSession().getServletContext().getRealPath("files");//获得files目录的绝对路径String fileName = file.getOriginalFilename();//获得上传文件的实际名称String[] types = fileName.split("\\.");String type = types[types.length - 1];type = "." + type;//获得文件的后缀名String targetFileName = UUIDGenerater.generateUUId() + type;File targetFile = new File(path, targetFileName);if (!targetFile.exists()) {targetFile.mkdirs();}try {file.transferTo(targetFile);//保存文件} catch (Exception e) {e.printStackTrace();}// 图片和文件的返回要求// original: "1.png"// size: "86846"// state: "SUCCESS"// title: "1484710315158045904.png"// type: ".png"// url: "/ueditor/jsp/upload/image/20170118/1484710315158045904.png"Map<String, Object> result = new HashMap<String, Object>();result.put("state", "SUCCESS");// UEDITOR的规则:不为SUCCESS则显示state的内容result.put("url", "/files/" + targetFileName);result.put("title", file.getOriginalFilename());result.put("original", file.getOriginalFilename());result.put("size", file.getSize());result.put("type", type);return result;}}


3.CORSFilter代码

import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletResponse;public class CORSFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest,ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;httpResponse.addHeader("Access-Control-Allow-Origin", "*");//接收任意域名跨域,当然实际情况要指定几个信任的域名httpResponse.addHeader("Access-Control-Allow-Headers", "X_Requested_With");filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {}}

要在web.xml中把这个filter加进去,怎么加我就不说了···



好。到这里就大功告成了,我测试的结果如下...


上传后再ueditor中查看html代码,发现图片的地址是指向文件服务项目的,然后查看文件服务项目的files文件夹



ok,就到这里了!

1 0
原创粉丝点击