ckeditor5 使用方法 + 上传图片

最近ckedito 发布了一个版本 ckedito 5,这个版本有一个强大的功能,它可以复制world文档直接粘贴在编辑器里,并且可以保存world里的样式和图片(重点)。这里有一个重点,就是上传图片,ckedito 5上传图片有三种方式,其中最常用的方式有两种:1.使用ckedito官方服务器(不推荐,此方法要收费)、2.自定义上传服务器。
本文章主要写的就是第二种方法。

使用方法

1.下载ckedito 5

此处推荐官方的在线生成器
话不多说上链接:https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/installing-plugins.html
1.进入官网 点击 builds =》Installation =》 Online builder 进入在线生成器
在这里插入图片描述
2.进入之后选择 Classic 然后一路下一步
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.ckedito 初始化

下载完成之后 在自己的项目里引入ckedito. js文件
在这里插入图片描述
html代码 :
创建一个容器 class名字自定义(我的是 class=‘comment’)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body >
		<div class='comment'>
			 
		</div>
		<button onClick='clickMe()'>dianji</button>
	</body>
	<script src='./jquery.min.js'></script>
	<script src="./build/ckeditor.js"></script>
	<script src='./demo.js'></script>
</html>

js代码

//重点代码 适配器
class UploadAdapter {
        constructor(loader) {
            this.loader = loader;
        }
         upload() {
            return new Promise((resolve, reject) => {
            const data = new FormData();
						let file = [];
						//this.loader.file 这是一个Promise格式的本地文件流,一定要通过.then 进行获取,之前在各大博客查了很多文章都拿不到这个值,最后经过两个多小时的探索终于找到了是Promise问题。
						this.loader.file.then(res=>{
							file = res; //文件流 
							data.append('file', file); //传递给后端的参数,参数名按照后端需求进行填写
							// data.append('type','1');
							data.append('bucketName','xydms');/传递给后端的参数,参数名按照后端需求进行填写
							data.append('ckCsrfToken','oCS0feM9aUb0v4zQqrEgcExpQeWTZXG4pch37uds');/传递给后端的参数,参数名按照后端需求进行填写
							data.append('objectName','1101053001');/传递给后端的参数,参数名按照后端需求进行填写
							$.ajax({
							    url: 'http://xxx/xxx.php', //后端的上传接口 
							    type: 'POST',
							    data: data,
							    dataType: 'json',
							    processData: false,
							    contentType: false,
							    success: function (data) {
							        if (data) {
												console.log(data)
							            resolve({
							                default: data.default //后端返回的参数 【注】返回参数格式是{uploaded:1,default:'http://xxx.com'}
							            });
							        } else {
							            reject(data.msg);
							        }
							
							    }
							});
						})
						

        });
        }
        abort() {
        }
    }

//实例化编辑器
ClassicEditor
			.create( document.querySelector( '.comment' ), {
				// ckfinder: {
				// 	uploadUrl: 'upload'
				// },
				toolbar: {
					items: [
						'heading',
						'|',
						'bold',
						'italic',
						'link',
						'bulletedList',
						'numberedList',
						'|',
						'indent',
						'outdent',
						'|',
						'imageUpload',
						'blockQuote',
						'insertTable',
						'mediaEmbed',
						'undo',
						'redo'
					]
				},
				language: 'zh',
				image: {
					toolbar: [
						'imageTextAlternative',
						'imageStyle:full',
						'imageStyle:side'
					]
				},
				table: {
					contentToolbar: [
						'tableColumn',
						'tableRow',
						'mergeTableCells'
					]
				},
				licenseKey: '',
				
			} )
			.then( editor => {
				// 加载了适配器
				    editor.plugins.get('FileRepository').createUploadAdapter = (loader)=>{
				        return new UploadAdapter(loader);
				    };
				window.editor = editor;
		
				
				
				
			} )
			.catch( error => {
				console.error( 'Oops, something gone wrong!' );
				console.error( 'Please, report the following error in the https://github.com/ckeditor/ckeditor5 with the build id and the error stack trace:' );
				console.warn( 'Build id: kngfcngsrrab-jujsj4qk5w31' );
				console.error( error );
			} );
			
			function clickMe(){
				console.log(window.editor.getData()) //获取编辑器的内容 getData()
			}

到这里就ok了,看一下成功后的效果
在这里插入图片描述
在这里插入图片描述

注意

world文档有这种折叠标题的,全部转化为正文类型,否则图片会出现错误
在这里插入图片描述
转化方法 ctrl + a 全选 点击标题 -》 正文
在这里插入图片描述
然后在进行复制
在这里插入图片描述

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
首先,你需要安装 `@ckeditor/ckeditor5-vue` 和 `@ckeditor/ckeditor5-build-classic` 两个依赖包。 ``` npm install --save @ckeditor/ckeditor5-vue @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-vue' 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` 的请求,然后返回上传的图片地址。 希望以上内容能够帮到你。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

雾里桃花

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

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

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

打赏作者

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

抵扣说明:

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

余额充值