vue中使用elementUI+TinyMCE富文本编辑器实现一些常用编辑器功能、自定义图片上传、视频、生成文件链接

文前推荐一下👉前端必备工具推荐网站(图床、API和ChatAI、智能AI简历、AI思维导图神器等实用工具):
站点入口:http://luckycola.com.cn/
图床:https://luckycola.com.cn/public/dist/#/imghub
多种API:https://luckycola.com.cn/public/dist/#/
ChatAI:https://luckycola.com.cn/public/dist/#/chatAi
AI思维导图神器:https://luckycola.com.cn/public/dist/#/aiQStore/aiMindPage

vue+elementUI+axios+TinyMCE富文本编辑器实现一些常用编辑器功能、自定义图片上传、视频、生成文件链接

前言:在进行描述性项目时,项目后台是避免不了使用富文本编辑器,市面上的富文本很多,大概有这些

1. TinyMCE起步

  • 1.我在网上找了很长时间关于如何在tinyMCE中上传图片,说各种的都有,但是对我没有很大的帮助。
  • 2.这里先放上最后的效果图,一般写文章的需求都能实现,博客系统一般都用Markdown
    效果图:
    1. TinyMCE的官网是英文,对英文基础要求比较高,所以这里放上TinyMCE中文文档,上面有针对官网优化后的配置代码

2.Vue中集成TinyMCE富文本编辑器

  1. 第一步,在项目中下载TinyMCE
    npm install --save @tinymce/tinymce-vue
    版本信息:
  2. 第二步页面引入+注册组件
import Editor from "@tinymce/tinymce-vue";
import axios from "axios";

注册组件

//注册富文本编辑器
components:{
  Editor
}
  1. 第三步在template中使用
<template>
    <div>
      <!--
       api-key的值去官网自己注册获取一个
       v-model是最后富文本生成的HTML标签内容
       init是初始化配置
        -->
     <editor
         v-model="content"
         api-key="you-keys"
         :init="inits"
       />
     </div>
</template>
  1. 第四步data中初始化配置以及设置图片上传,如果只需要上传图片的话到这就可以了
<script>
   data() {
   return {
       content:"",
        inits: {
              language: "zh_CN", //语言设置
              height: 500, //高度
              menubar: true, // 显示最上方menu菜单
              toolbar: true, //false禁用工具栏(隐藏工具栏)
              browser_spellcheck: true, // 拼写检查
              branding: false, // 去水印
              statusbar: false, // 隐藏编辑器底部的状态栏
              elementpath: false, //禁用下角的当前标签路径
              paste_data_images: true, // 允许粘贴图像
              toolbar:
                "undo redo | bold italic underline strikethrough | fontselect fontsizeselect formatselect | alignleft aligncenter alignright alignjustify | outdent indent | numlist bullist | forecolor backcolor removeformat | pagebreak | charmap emoticons | fullscreen preview save print | insertfile image media template link anchor codesample | code | ltr rtl",
              plugins:
                "print preview paste importcss searchreplace autolink autosave save directionality code visualblocks visualchars fullscreen image link media template codesample table charmap hr pagebreak nonbreaking anchor toc insertdatetime advlist lists wordcount imagetools textpattern noneditable help charmap quickbars emoticons",
              // 图片上传
              //blobInfo是关于文件
              //success是成功调用
              //failure是失败调用
              images_upload_handler: function (blobInfo, success, failure) {
                  //这里注意要用var声明,我测试的时候不能用let和const
                  var formData = new FormData();
                  //添加参数
                  formData.append("file", blobInfo.blob());
                  axios.post("这里放文件上传地址", formData)
                     .then((response) => {
                       if (response.data.code == 20000) {
                          //success中
                          success(response.data.data.url);
                       } else {
                         failure("上传失败!");
                 }
            });
       },
     },
 }
}
</script>
  1. 上一步完成,已经可以使用图片上传了,下面还有一种自定义上传文件(可以上传自定义图片,视频)方式(vue中只需要把init里的配置项换了就行)
init:{
   selector: '#tinydemo4',
   language:'zh_CN',
   plugins: 'link',
   toolbar: 'link',
   file_picker_callback: function (callback, value, meta) {
       //文件分类
       var filetype='.pdf, .txt, .zip, .rar, .7z, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .mp3, .mp4';
       //后端接收上传文件的地址
       var upurl='';
       //为不同插件指定文件类型及后端地址
       switch(meta.filetype){
           case 'image':
               filetype='.jpg, .jpeg, .png, .gif';
               upurl='图片上传路径';
               break;
           case 'media':
               filetype='.mp3, .mp4';
               upurl='视频上传路径';
               break;
           case 'file':
           default:
       }
       //模拟出一个input用于添加本地文件
       var input = document.createElement('input');
           input.setAttribute('type', 'file');
           input.setAttribute('accept', filetype);
       input.click();
       input.onchange = function() {
           var file = this.files[0];

           var xhr, formData;
           console.log(file.name);
           xhr = new XMLHttpRequest();
           xhr.withCredentials = false;
           xhr.open('POST', upurl);
           xhr.onload = function() {
               var json;
               if (xhr.status != 200) {
                   failure('HTTP Error: ' + xhr.status);
                   return;
               }
               //json是后端返回的数据
               json = JSON.parse(xhr.responseText);
                    console.log(json);
               if (!json || typeof json.data.url != 'string') {
                   failure('Invalid JSON: ' + xhr.responseText);
                   return;
               }
               callback(json.data.url);
           };
           formData = new FormData();
           formData.append('file', file, file.name );
           xhr.send(formData);

           //下方被注释掉的是官方的一个例子
           //放到下面给大家参考
           
           /*var reader = new FileReader();
           reader.onload = function () {
               // Note: Now we need to register the blob in TinyMCEs image blob
               // registry. In the next release this part hopefully won't be
               // necessary, as we are looking to handle it internally.
               var id = 'blobid' + (new Date()).getTime();
               var blobCache =  tinymce.activeEditor.editorUpload.blobCache;
               var base64 = reader.result.split(',')[1];
               var blobInfo = blobCache.create(id, file, base64);
               blobCache.add(blobInfo);

               // call the callback and populate the Title field with the file name
               callback(blobInfo.blobUri(), { title: file.name });
           };
           reader.readAsDataURL(file);*/
       };
   },
};
  • 下面是成功以后的效果
    成功后效果
  • 最后我们就可以拿着我们定义的content传给前台项目了

本文完结撒花,有帮到的伙伴感谢三连~~

更多推荐:wantLG的《普歌-码上鸿鹄:npm run dev启动项目报错module.exports = merge(prodEnv, {TypeError: merge is not a function…


  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
tinymce 是一款常用富文本编辑器,它提供了丰富的功能,包括自定义图片上传。以下是关于如何实现 tinymce 自定义图片上传的回答。 要实现 tinymce 自定义图片上传,首先需要了解 tinymce 的配置项。在初始化 tinymce 时,通过设置 `images_upload_url` 参数,可以指定上传图片的 URL 地址。 接下来,在后端服务器上,需要编写一个接口来处理图片上传的逻辑。这个接口的功能主要包括接收上传的图片文件、保存图片到服务器上的指定目录,并返回图片的 URL 地址。 在前端的页面,可以通过 tinymce 提供的插件来添加一个图片上传的按钮。当用户点击该按钮时,会触发图片上传的逻辑。 实现图片上传的逻辑可以使用 AJAX 技术,通过 XMLHttpRequest 对象将图片文件发送到后端接口。在接收到后端返回的图片 URL 后,可以将图片插入到 tinymce 编辑器。 同时,在图片上传过程,还可以添加一些额外的功能来增加用户体验。例如,可以实现图片预览功能,让用户在上传图片之前可以查看图片的预览效果。还可以添加进度条等交互元素,以便用户了解图片上传的进度。 总的来说,实现 tinymce 自定义图片上传需要在后端编写图片上传的接口,并在前端页面添加图片上传的逻辑。在上传过程,可以通过 AJAX 技术发送图片文件到后端,并在接收到后端返回的图片 URL 后将其插入到编辑器。此外,还可以添加一些额外的功能来提升用户体验。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wantLG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值