默认状况下,ckeditor编辑器会把图片上传到一个固定的地址,可是出于某些考虑,咱们也须要把图片上传到第三方网站进行处理。如下讲解一下如何把图片上传到七牛云CDN。ios
首先须要去申请七牛的帐号和服务,而后经过七牛的jssdk上传图片。申请步骤略过,能够自行去七牛官网查看。shell
npm i qiniu-js -S
// upload.js import axios from 'axios'; import * as qiniu from 'qiniu-js'; const cache = {}; // 从服务器获取token async function getUploadToken() { try { if(cache.qiniu_token) { return cache.qiniu_token } const { data } = await axios.get('/qiniu_token') cache.qiniu_token = data.token return data.token } catch (error) { return Promise.reject(error); } } // 上传文件到七牛 export default async function upload(file) { // 用时间戳做为文件名 const time = new Date().getTime(); const token = await getUploadToken(); return qiniu.upload(file, time, token, { fname: time }) }
ckeditor5为图片上传提供了专门的方法,只须要实现该方法,就能够替换默认的图片上传,从而达到自定义上传的目的。npm
插件的名字能够固定,可是须要实现upload和abort两个方法axios
// uploadAdapter.js import qiniuUpload from './upload.js'; export default class UploadAdapter { constructor(loader) { this.loader = loader; this.uploader = null; } // 经过这个方法,会把上传到服务器的文件地址展现到编辑器中 async upload() { const file = await this.loader.file; this.uploader = await qiniuUpload(file) return new Promise((resolve, reject)=>{ this.uploader.subscribe(data=>{ }, error=>{ console.error(error) return reject(error); }, data => { return resolve({ default: 你的服务器地址 + data.key, }) }) }) } // 这个方法会在编辑器销毁时候,终止文件上传 abort() { if(this.uploader) { this.uploader.unsubscribe(); } } }
extraPlugins
接收一个插件方法数组,使用方法以下:数组
import UploadAdapter from './uploadAdapter.js'; ClassicEditor.create( dom , { extraPlugins: [ uploadAdapterPlugin ], }) function uploadAdapterPlugin( editor ) { editor.plugins.get('FileRepository').createUploadAdapter = new UploadAdapter }
经过以上的配置,就能够在ckeditor5里面,上传文件到七牛云CDN了。服务器