quill富文本编辑器默认的图片上传是将图片地址转换为base64格式,可能会导致字段过长;默认的视频上传是插入iframe标签,与需要的video标签不符合
图片上传
初始化编辑器时重写image上传事件
const editor = this.$refs.editor;
this.Quill = new Quill(editor, this.options);
// 如果设置了上传地址则自定义图片上传事件
if (this.type === "url") {
let toolbar = this.Quill.getModule("toolbar");
toolbar.addHandler("image", (value) => {
this.uploadType = "image";
if (value) {
// 使用的是elm上传组件的点击事件
this.$refs.upload.$children[0].$refs.input.click();
} else {
this.quill.format("image", false);
}
});
}
this.Quill.pasteHTML(this.currentValue);
视频上传
先引入注册自定义video.js模块
import Quill from "quill";
import video from "./video.js"; // 自定义的video.js
// Quill.register(video);
Quill.register({
'formats/video': video }, true);
// 工具栏配置
toolbar: {
container: [
["bold", "italic", "underline", "strike"], // 加粗 斜体 下划线 删除线
["blockquote", "code-block"], // 引用 代码块
[{
list: "ordered" }, {
list: "bullet" }], // 有序、无序列表
[{
indent: "-1" }, {
indent: "+1" }], // 缩进
[{
size: ["small", false, "large", "huge"] }], // 字体大小
[{
header: [1, 2, 3, 4, 5, 6, false] }], // 标题
[{
color: [] }, {
background: [] }], // 字体颜色、字体背景颜色
[{
align: [] }], // 对齐方式
["clean"], // 清除文本格式
["link", "image", "video"], // 链接、图片、视频
],
handlers: {
video: this.handelVideo,
},
},
...
handelVideo() {
//自定义上传视频事件
this.uploadType = "video";
this.$nextTick(() => {
this.$refs.uploadVideo.$children[0].$refs.input.click();
});
},
...
上传成功的回调
handleUploadSuccess(res, file) {
// 获取富文本组件实例
let quill = this.Quill;
// 如果上传成功
if (res.code == 200) {
// 获取光标所在位置
let length = quill.getSelection().index;
if (this.uploadType === "image") {
// 插入图片 res.url为服务器返回的图片地址
quill.insertEmbed(length, "image", this.fullImgUrl(res.fileName));
} else if (this.uploadType === "video") {
// 插入视频 res.url为服务器返回的视频地址
const url = this.fullImgUrl(res.fileName)
quill.insertEmbed(length, "video", {
url: url, // 注意使用url,不要使用src
width: '100%',
height: 'auto'
});
}
// 调整光标到最后
quill.setSelection(length + 1);
} else {
this.$message.error("插入失败");
}
},
video.js