springBoot下后端百度富文本编辑器的写法
程序员文章站
2024-01-10 09:12:22
...
SpringBoot后端百度富文本编辑器的做法(Java)
1.后端加载百度富文本编辑器的配置文件congfig.json,本项目放在resources下的static.ueditor下
congfig.json:
{
/* 上传图片配置项 */
"imageActionName": "uploadimage", /* 执行上传图片的action名称 */
"imageFieldName": "upfile", /* 提交的图片表单名称 */
"imageMaxSize": 2048000, /* 上传大小限制,单位B */
"imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
"imageCompressEnable": true, /* 是否压缩图片,默认是true */
"imageCompressBorder": 1600, /* 图片压缩最长边限制 */
"imageInsertAlign": "none", /* 插入的图片浮动方式 */
"imageUrlPrefix": "", /* 图片访问路径前缀 */
"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": "", /* 视频访问路径前缀 */
"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": "", /* 文件访问路径前缀 */
"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": "", /* 图片访问路径前缀 */
"imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */
"imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */
/* 列出指定目录下的文件 */
"fileManagerActionName": "listfile", /* 执行文件管理的action名称 */
"fileManagerListPath": "/ueditor/jsp/upload/file/", /* 指定要列出文件的目录 */
"fileManagerUrlPrefix": "", /* 文件访问路径前缀 */
"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"
] /* 列出的文件类型 */
}
2.直接写后端的controller,前端直接调用接口dispatch接口,初始化的时候action的值是config空,本文只写了上传图片当action的值是uploadimage上传图片
import cn.thinkjoy.springboot.business.response.HttpResponse;
import cn.thinkjoy.springboot.homework.utils.ResultUtil;
import cn.thinkjoy.springboot.utils.CodeProduceUtil;
import cn.thinkjoy.springboot.utils.UploadUtIl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baidu.ueditor.define.AppInfo;
import com.baidu.ueditor.define.BaseState;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartException;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Iterator;
/**
* 〈功能简述〉<br>
* 〈〉
*
* @author leichunhong
* @create 2020-11-09
* @since 1.0.0
*/
@RestController
@RequestMapping("/upload")
@Api(value = "文件上传", tags = "文件上传")
public class Upload {
@Value("${file.uploadFolder}")
private String uploadFolder;
@Value("${file.upload.nama}")
private String reurl;
@CrossOrigin
@RequestMapping(value = "/dispatch", method = {RequestMethod.POST, RequestMethod.GET})
public void config(HttpServletRequest request, HttpServletResponse response, String action) throws MultipartException {
response.setContentType("application/json");
String path="";
try {
//获取config.json的地址读取
if ("config".equals(action)) { //如果是初始化
String file = "static/ueditor/config.json";
String exec = readFile(request, file);
response.setCharacterEncoding("UTF-8");
response.setContentType("application/javascript");
response.getWriter().write(exec);
response.getWriter().close();
} else if ("uploadimage".equals(action)) { //如果是上传图片、
//将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
//检查form中是否有enctype="multipart/form-data"
if (multipartResolver.isMultipart(request)) {
//将request变成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
//获取multiRequest 中所有的文件名
Iterator iter = multiRequest.getFileNames();
while (iter.hasNext()) {
//一次遍历所有文件
MultipartFile multipartFile = multiRequest.getFile(iter.next().toString());
if (multipartFile != null) {
// 项目在容器中实际发布运行的根路径
String realPath = uploadFolder;
// 自定义的文件名称
String trueFileName = CodeProduceUtil.getCode() + "." + FilenameUtils.getExtension(multipartFile.getOriginalFilename());
// 设置存放图片文件的路径
path = realPath + trueFileName;
File file = new File(path);
multipartFile.transferTo(file);
path = reurl + "/upload/" + trueFileName;
//组装百度上传图片返回连接
JSONObject jsonobject = new JSONObject();
jsonobject.put("state", "SUCCESS");
jsonobject.put("original", multipartFile.getName());
jsonobject.put("size", multipartFile.getSize());
jsonobject.put("title", "图片");
jsonobject.put("type", FilenameUtils.getExtension(multipartFile.getOriginalFilename()));
jsonobject.put("url", path);
response.setHeader("Access-Control-Allow-Origin", "*");//设置该图片允许跨域访问
response.setHeader("Access-Control-Allow-Headers", "X-Requested-With,X_Requested_With");//设置允许的跨域header
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(jsonobject.toString());
response.getWriter().close();
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
private String readFile(HttpServletRequest request, String file) throws IOException {
StringBuilder builder = new StringBuilder();
try {
InputStream inputStream = ClassLoader.getSystemResourceAsStream(file);
InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader bfReader = new BufferedReader(reader);
String tmpContent = null;
while ((tmpContent = bfReader.readLine()) != null) {
builder.append(tmpContent);
}
bfReader.close();
} catch (UnsupportedEncodingException e) {
// 忽略
}
JSONObject jSONObject = filter(builder.toString());
String result = jSONObject.toJSONString();
String callbackName = request.getParameter("callback");
if (callbackName != null) {
if (!validCallbackName(callbackName)) {
return new BaseState(false, AppInfo.ILLEGAL).toJSONString();
}
return callbackName + "(" + result + ");";
} else {
return result;
}
}
// 过滤输入字符串, 剔除多行注释以及替换掉反斜杠
private JSONObject filter(String input) {
JSONObject jSONObject = JSON.parseObject(input.replaceAll("/\\*[\\s\\S]*?\\*/", ""));
return jSONObject;
}
/**
* callback参数验证
*/
public boolean validCallbackName(String name) {
if (name.matches("^[a-zA-Z_]+[\\w0-9_]*$")) {
return true;
}
return false;
}
}
3.上传图片的路径和域名配置,图片上传到后端项目的data/file目录下,file.upload.nama是后端项目域名
file.uploadFolder=/data/file/
#上传文件本地域名
file.upload.nama=http://www.xxx.com
推荐阅读
-
springBoot下后端百度富文本编辑器的写法
-
vue2.x集成百度UEditor富文本编辑器的方法
-
(转)java Springboot富文本编辑器ueditor的内容使用itext5导出为pdf文件
-
vue2.x集成百度UEditor富文本编辑器的方法
-
Vue前后端分离项目如何模块的使用Ueditor百度富文本框
-
快速掌握百度富文本编辑器 UEditor 的使用
-
富文本编辑器 - 关于symfony中读取web/bundles路径下php文件的问题
-
百度富文本编辑器UEditor的使用(Mac+IDEA)
-
【ASP.NET】9.解决百度富文本编辑器UEditor往后台传数据写入数据库时,出现错误:检测到有潜在危险的Request
-
百度ueditor富文本编辑器的使用