vue3开发2:在vue3项目中集成ckeditor5编辑器,自定义图片上传,图片编辑排坑(二)

书接上文
这里我们讲一下在vue3中
ckeditor5编辑器的自定义图片上传,图片编辑功能

自定义图片上传

ckeditor5上传其实也有好几种方式,但是由于公司业务需求,需要带token在上传的请求中,所以只能使用自定义图片上传。(这里是直接上传服务器,而不是保存后上传)

  1. 新建一个uploadImg.js
import axios from 'axios'


export default class MyUploadAdapter {
    constructor( loader ) {
      // Save Loader instance to update upload progress.
      this.loader = loader;
    }
   
    async upload() {
      const data = new FormData();
    //   data.append('typeOption', 'upload_image');
      data.append('files', await this.loader.file);
   
      return new Promise((resolve, reject) => {
        axios({
          url: `请求地址`,
          method: 'post',
          data,
          headers: {
            'token': token // 此处为你定义的token 值(Bearer token 接口认证方式)
          },
          withCredentials: true // true 为不允许带 token, false 为允许,可能会遇到跨域报错:Error: Network Error 弹窗提示
        }).then(res => {
            console.log(res)
          var resData = {}
          resData.default = res.url
          //注意这里的resData一定要是一个对象,而且外面一定要有一个default设置为图片上传后的url,这是ckeditor的规定格式
          resolve(resData);
        }).catch(error => {
          reject(error)
        });
      });
    }
  }
  1. 在editBox中设置适配器

import MyUploadAdapter from "./uploadImg";

const initCKEditor = () => {
    CKEditor.create(document.querySelector("#editor"), {
      language: "zh-cn",
    })
      .then((editor) => {
        const toolbarContainer = document.querySelector("#toolbar-container");
        toolbarContainer.appendChild(editor.ui.view.toolbar.element);
        editorObj = editor; //将编辑器保存起来,用来随时获取编辑器中的内容等,执行一些操作
        
        //自定义图片上传
        editor.plugins.get("FileRepository").createUploadAdapter = (loader) => {
          return new MyUploadAdapter(loader); //自定义上传图片
        };
      })
      .catch((error) => {
        console.error(error);
      });

这时候自定义上传图片已经完成了
但是仔细一看,没有图片上传后没有编辑大小的功能
在这里插入图片描述
这就奇怪了,后来我百度了一下,发现是我们npm的版本中是有引入相关的依赖,但是在官方的npm包的时候没有使用到这个功能,所以我们得去官方的gitlab把源码下载下来,加上这个功能后打包,直接引入我们的项目中

  1. 下载资源包(步骤省略)

  2. 打开项目,安装依赖,找到该路径文件src\ckeditor.js
    在这里插入图片描述
    把Imageresize引入
    在这里插入图片描述
    下面也不要忘记

  3. 然后我们build一下这个包,会生成一个build文件夹,这就是我们需要的东西(translations是语言包,可以只留下中文包)
    在这里插入图片描述

  4. 在项目中引入即可

import CKEditor from "./ckeditor5-build-decoupled-document";
import "./ckeditor5-build-decoupled-document/build/translations/zh-cn.js";
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要安装 `@ckeditor/ckeditor5-vue2` 和 `@ckeditor/ckeditor5-build-classic` 两个依赖包。 ``` npm install --save @ckeditor/ckeditor5-vue2 @ckeditor/ckeditor5-build-classic ``` 然后在你的 Vue 组件引入 CKEditor 组件: ```vue <template> <div> <ckeditor :editor="editor" v-model="content" :config="editorConfig"></ckeditor> </div> </template> <script> import ClassicEditor from '@ckeditor/ckeditor5-build-classic' import CKEditor from '@ckeditor/ckeditor5-vue2' export default { components: { ckeditor: CKEditor.component }, data() { return { content: '', editorConfig: { // 配置项 }, editor: ClassicEditor } } } </script> ``` 在上面的代码,我们引入了 `ClassicEditor`,它是一个预先配置好的编辑器,包含了常用的插件,如加粗、斜体、链接等。我们也可以自定义 `editorConfig`,来配置编辑器。 下面是一个常用的配置项示例: ```js editorConfig: { toolbar: { items: [ 'bold', 'italic', 'link', '|', 'bulletedList', 'numberedList', '|', 'imageUpload', 'blockQuote', 'insertTable', 'undo', 'redo' ] }, image: { toolbar: [ 'imageTextAlternative', '|', 'imageStyle:full', 'imageStyle:side', '|', 'imageResize', '|', 'imageUpload', 'imageUpload', 'imageUpload', 'imageUpload' ], styles: [ 'full', 'side' ] }, language: 'zh-cn', table: { contentToolbar: [ 'tableColumn', 'tableRow', 'mergeTableCells', 'tableCellProperties', 'tableProperties' ] }, licenseKey: '', simpleUpload: { uploadUrl: '/your/upload/url', headers: { 'X-CSRF-TOKEN': 'CSRF-Token' } } } ``` 上面的配置,我们开启了图片上传功能,并且添加了表格插入、图片上传、撤销、重做等常用功能。同时也设置了语言为文。 如果需要添加额外的插件,可以使用 `@ckeditor/ckeditor5-*` 的包名,比如添加字数统计插件: ``` npm install --save @ckeditor/ckeditor5-word-count ``` 然后在 `editorConfig` 添加: ```js import WordCount from '@ckeditor/ckeditor5-word-count/src/wordcount'; editorConfig: { plugins: [WordCount], toolbar: [ 'wordCount' ] } ``` 这样就可以在编辑器添加字数统计功能了。 我们也可以自定义上传图片的方法,需要在配置项添加 `simpleUpload` 选项: ```js editorConfig: { simpleUpload: { uploadUrl: '/your/upload/url', headers: { 'X-CSRF-TOKEN': 'CSRF-Token' }, // 自定义上传方法 async upload(file) { // 这里写上传逻辑 const formData = new FormData(); formData.append('file', file); const response = await axios.post('/your/upload/url', formData, { headers: { 'Content-Type': 'multipart/form-data', 'X-CSRF-TOKEN': 'CSRF-Token' } }); return { default: response.data.url }; } } } ``` 在上面的代码,我们使用了 axios 发送了一个 `multipart/form-data` 的请求,然后返回上传的图片地址。 希望以上内容能够帮到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值