您现在的位置是:首页 > 技术教程 正文

若依项目(前端后分离版)整合百度(Ueditor)富文本编辑器

admin 阅读: 2024-03-29
后台-插件-广告管理-内容页头部广告(手机)

1、Ueditor 资源下载

ueditor 官网:http://ueditor.baidu.com

ueditor API 文档:http://ueditor.baidu.com/doc

ueditor github 地址:http://github.com/fex-team/ueditor

2、资源下载之后的文件解压,改个名字,改为UEditor,复制放入项目public文件夹下

3、方便使用,形成组件,放入components文件夹下

ueditor.vue 代码,如果需要在headers中配置Authorization,在config中配置无效,需修改js文件,具体修改见下文

  1. <template>
  2. <div>
  3. <div :id="id" type="text/plain"></div>
  4. </div>
  5. </template>
  6. <script>
  7. import '/public/static/Ueditor/ueditor.config.js'
  8. import '/public/static/Ueditor/ueditor.all.min.js'
  9. import '/public/static/Ueditor/lang/zh-cn/zh-cn.js'
  10. import '/public/static/Ueditor/ueditor.parse.min.js'
  11. import { getToken } from "@/utils/auth";
  12. export default {
  13. name: 'UEditor',
  14. props: {
  15. /* 编辑器的内容 */
  16. value: {
  17. type: String,
  18. default: "",
  19. },
  20. /* 只读 */
  21. readOnly: {
  22. type: Boolean,
  23. default: false,
  24. },
  25. id: {
  26. type: String,
  27. default: 'editor'
  28. }
  29. },
  30. data () {
  31. return {
  32. editor: null,
  33. defaultMsg:"",
  34. config: {
  35. initialFrameWidth: '100%',
  36. initialFrameHeight: 280,
  37. //上传文件接口
  38. serverUrl: process.env.VUE_APP_BASE_API + "/ueditor/upload",
  39. //serverUrl : '/ueditor/jsp/config.json',
  40. readonly: this.readOnly,
  41. placeholder: "请输入内容",
  42. imageUrlPrefix: process.env.VUE_APP_BASE_FILE_API,//图片访问前缀
  43. },
  44. }
  45. },
  46. mounted() {
  47. this.$nextTick(() => {
  48. this.editor = UE.getEditor(this.id,this.config); // 初始化UE
  49. this.editor.addListener("ready", () => {
  50. this.editor.execCommand('insertHtml', this.value);
  51. // 确保UE加载完成后,放入内容
  52. this.editor.focus()
  53. })
  54. })
  55. },
  56. watch: {
  57. value : function(val) {
  58. if(val==null||val==undefined){
  59. val="";
  60. }
  61. this.editor.setContent(val);
  62. }
  63. },
  64. methods: {
  65. // 获取内容方法
  66. getUEContent() {
  67. return this.editor.getContent()
  68. },
  69. // 清空编辑器内容
  70. clearContent() {
  71. return this.editor.execCommand('cleardoc');
  72. },
  73. },
  74. destroyed() {
  75. this.editor.destroy();
  76. },
  77. beforeDestroy() {
  78. // 组件销毁的时候,要销毁 UEditor 实例,下次进入页面才能重新加载出编辑器
  79. if (this.editor !== null && this.editor.destroy) {
  80. this.editor.destroy();
  81. }
  82. },
  83. }
  84. </script>

4、在main.js中引入组件,可全局使用

  1. // 百度富文本组件
  2. import Editor from "@/components/Editor"
  3. //全局组件挂载
  4. Vue.component('UEditor', UEditor)

5、实现图片上传,配置后端接口

(1)Java端建个EditorController,配置图片上传接口,路径与serverUrl保持一致;

(2)将UEditorConfig.json文件放在项目的resources文件夹下,内容从 UEditor/jsp/config.json 下复制

(3)EditorController代码,文件文件和获取配置写成两个接口,获取配置使用get请求,上传使用post请求

  1. /**
  2. * 百度编辑器图片上传
  3. *
  4. * @author ruoyi
  5. */
  6. @RestController
  7. @RequestMapping("/ueditor")
  8. public class EditorController
  9. {
  10. @Autowired
  11. private ServerConfig serverConfig;
  12. /**
  13. * 读取配置文件
  14. * @param action
  15. * @param noCache
  16. * @return
  17. * @throws IOException
  18. */
  19. @GetMapping("/upload")
  20. public String getConfig(String action,String noCache) throws IOException {
  21. Resource resource = new ClassPathResource("UEditorConfig.json");
  22. InputStream in=resource.getInputStream();
  23. if (in != null) {
  24. String text = Utils.read(in);
  25. return text;
  26. }
  27. return null;
  28. }
  29. /**
  30. * editor通用上传请求(单个)
  31. */
  32. @PostMapping("/upload")
  33. public AjaxResult editorUploadFile(String action, MultipartFile upfile) {
  34. try{
  35. AjaxResult ajax = AjaxResult.success();
  36. // 上传文件路径
  37. String filePath = RuoYiConfig.getUploadPath()+"/ueditor";
  38. // 上传并返回新文件名称
  39. String fileName = FileUploadUtils.upload(filePath, upfile);
  40. //String url = serverConfig.getUrl() + fileName;
  41. ajax.put("state", "SUCCESS");
  42. ajax.put("url", fileName);
  43. ajax.put("original", upfile.getOriginalFilename());
  44. if (action.equals("uploadimage")) {
  45. ajax.put("title", "图片文件");
  46. } else if (action.equals("uploadvideo")) {
  47. ajax.put("title", "视频文件");
  48. } else {
  49. ajax.put("title", "文件");
  50. }
  51. return ajax;
  52. }catch (Exception e){
  53. e.printStackTrace();
  54. return AjaxResult.error("上传失败");
  55. }
  56. }
  57. }

(4)配置授权认证,不配置,则访问授权报错

第一种不鉴权,在java端SecurityConfig 文件中开放/ueditor 接口,方便快捷;

第二种增加授权,在前端,修改ueditor.all.js 文件,get请求时需加上Authorization权鉴信息

post请求上传图片并回显,需修改请求代码以及返回消息解析代码

  1. var fileForm = new FormData();
  2. fileForm.append("upfile",input.files[0]);
  3. var oReq = new XMLHttpRequest();
  4. var list = window.document.cookie.split(";")
  5. let filterList = list.filter(item =>{
  6. return item.substring(0,11) === "Admin-Token";
  7. })
  8. var token = filterList[0].substr(12);
  9. oReq.open("POST",imageActionUrl,true);
  10. oReq.setRequestHeader("Authorization", "Bearer "+token);
  11. oReq.send(fileForm);
  12. oReq.onreadystatechange = function(responseText) {
  13. if (oReq.readyState == 4 && oReq.status == 200) {
  14. var responseData = eval("("+oReq.responseText+")");
  15. callback(responseData); //回调函数
  16. }
  17. };

修改后,删除ueditor.all.min.js,复制ueditor.all.js并重命名为ueditor.all.min.js;

6、图片回显,若前后端部署在同一个服务器,可以不用配置imageUrlPrefix路径UEditorConfig.json保持不动,上传接口返回全路径;若不在同一服务器,可删除UEditorConfig.json中imageUrlPrefix,同时在ueditor.vue中配置访问前缀,且在上传接口返回路径使用半路径

7、项目使用

配置id,每次引用,配置不同id值;

<UEditor v-model="form.content" :id="ueidtorName" ref="ue"/>

获取编辑器内容,并赋值;

this.form.content = this.$refs.ue.getUEContent();
标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索