强大的富文本编辑器:quill
github:32k start++,:https://github.com/quilljs/quill

quill粘贴图片上传服务器

<link href="//cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">

<div id="editor" style="height: 370px">
<p>Hello World!</p>
</div>
<script src="//cdn.quilljs.com/1.3.6/quill.min.js"></script>
<script>
var toolbarOptions = [
['bold', 'italic', 'underline', 'strike'], // toggled buttons
['blockquote', 'code-block'], [{'header': 1}, {'header': 2}], // custom button values
[{'list': 'ordered'}, {'list': 'bullet'}],
[{'script': 'sub'}, {'script': 'super'}], // superscript/subscript
[{'indent': '-1'}, {'indent': '+1'}], // outdent/indent
[{'direction': 'rtl'}], // text direction [{'size': ['small', false, 'large', 'huge']}], // custom dropdown
[{'header': [1, 2, 3, 4, 5, 6, false]}], [{'color': []}, {'background': []}], // dropdown with defaults from theme
[{'font': []}],
[{'align': []}],
['image'], ['clean'] // remove formatting button
];
var editor = new Quill('#editor', {
modules: {toolbar: toolbarOptions},
theme: 'snow',
}); // 粘贴图片上传服务器
editor.root.addEventListener("paste", (e) => {
console.log(e)
console.log(this)
const clipboardData = e.clipboardData
// support cut by software & copy image file directly
const isImage = clipboardData.types.length && clipboardData.types.join('').includes('Files');
if (!isImage) {
return;
}
// only support single image paste
const file = clipboardData.files[0];
if (!file || !file.name || !(file.name.toLowerCase().indexOf(".png") !== -1 || file.name.toLowerCase().indexOf(".gif") !== -1
|| file.name.toLowerCase().indexOf(".jpg") !== -1)) {
console.log('粘贴的不是图片')
return;
}
var formData = new FormData;
formData.append('file', file)
// 在此执行上传
$.ajax({
data: formData,
processData: false,//不做处理
contentType: false,//不做处理
sync: false,
url: '/file/up/img',
type: 'post',
success(data) {
console.log(data)
if (data.code==0){
const range = editor.getSelection(true);
editor.insertEmbed(range.index, 'image', data.data);
}else {
layer.msg(data.msg)
} }
})
})
editor.clipboard.addMatcher('IMG', (node, delta) => {
const Delta = Quill.import('delta')
// 忽略base64插入操作
return new Delta().insert('')
})
</script>

上传图片到服务器返回url处理

完整代码

<link href="//cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">
<script src="//cdn.quilljs.com/1.3.6/quill.min.js"></script> <div id="editor" style="height: 370px">
<p>Hello World!</p>
</div> <input id="opImg" style="display: none;" type="file" onchange="addImg(this)"
accept="image/gif,image/jpeg,image/jpg,image/png,image/svg">
<script>
var editor,$
function addImg(e) {
const upImg = e.files[0];
console.log(editor)
var formData = new FormData;
formData.append('file', upImg)
$.ajax({
data: formData,
processData: false,//不做处理
contentType: false,//不做处理
sync: false,
url: '/file/up/img',
type: 'post',
success(data) {
console.log(data)
if (data.code == 0) {
const range = editor.getSelection(true);
editor.insertEmbed(range.index, 'image', data.data);
} else {
layer.msg(data.msg)
}
}
})
}
function imageHandler(e) {
// 在此执打开图片选择,行同步上传
/*const range = this.quill.getSelection(true);
this.quill.insertEmbed(range.index, 'image', 'http://localhost:8080/res/images/logo.png');*/
document.getElementById('opImg').click()
} layui.use(['layer', 'jquery', 'form'], function () {
$ = layui.jquery
var layer = layui.layer
, form = layui.form
var toolbarOptions = [
['bold', 'italic', 'underline', 'strike'], // toggled buttons
['blockquote', 'code-block'], [{'header': 1}, {'header': 2}], // custom button values
[{'list': 'ordered'}, {'list': 'bullet'}],
[{'script': 'sub'}, {'script': 'super'}], // superscript/subscript
[{'indent': '-1'}, {'indent': '+1'}], // outdent/indent
[{'direction': 'rtl'}], // text direction [{'size': ['small', false, 'large', 'huge']}], // custom dropdown
[{'header': [1, 2, 3, 4, 5, 6, false]}], [{'color': []}, {'background': []}], // dropdown with defaults from theme
[{'font': ['宋体']}],
[{'align': []}],
['image'], ['clean'] // remove formatting button
];
editor = new Quill('#editor', {
modules: {
toolbar: {
container: toolbarOptions,
handlers: {
image: imageHandler
}
}
},
theme: 'snow',
}); editor.root.addEventListener("paste", (e) => {
console.log(e)
console.log(this)
const clipboardData = e.clipboardData
// support cut by software & copy image file directly
const isImage = clipboardData.types.length && clipboardData.types.join('').includes('Files');
if (!isImage) {
return;
}
// only support single image paste
const file = clipboardData.files[0];
if (!file || !file.name || !(file.name.toLowerCase().indexOf(".png") !== -1 || file.name.toLowerCase().indexOf(".gif") !== -1
|| file.name.toLowerCase().indexOf(".jpg") !== -1 || file.name.toLowerCase().indexOf(".jpeg") !== -1)) {
console.log('粘贴的不是图片')
return;
}
console.log(file)
var formData = new FormData;
formData.append('file', file)
// 在此执行上传
$.ajax({
data: formData,
processData: false,//不做处理
contentType: false,//不做处理
sync: false,
url: '/file/up/img',
type: 'post',
success(data) {
console.log(data)
if (data.code == 0) {
const range = editor.getSelection(true);
editor.insertEmbed(range.index, 'image', data.data);
} else {
layer.msg(data.msg)
} }
})
})
editor.clipboard.addMatcher('IMG', (node, delta) => {
const Delta = Quill.import('delta')
return new Delta().insert('')
})
});
</script>

quill富文本编辑器quill粘贴图片上传服务器的更多相关文章

  1. Simditor 富文本编辑器多选图片上传、视频连接插入

    simditor 是一个基于浏览器的所见即所得的文本编辑器.Simditor 富文本编辑器, 支持多选图片上传, 视频连接插入, HTML代码编辑以及常用富文本按钮,支持的浏览器:IE10.Firef ...

  2. wangEditor富文本编辑器使用及图片上传

    引入js文件 <script type="text/javascript" src="style/js/wangEditor.min.js">< ...

  3. 富文本编辑器TInyMCE,本地图片上传(Image Upload)

    TinyMCE 官网 (类似:百度的富文本web编辑器UEditor) 第一步 下载 TinyMCE,解压后放入工程,在需要的HTML页面引入tinymce.min.js. 第二步 下载tinyMCE ...

  4. C#中富文本编辑器Simditor带图片上传的全部过程(MVC架构的项目)

    描述:最近c#项目中使用富文本编辑器Simditor,记录一下以便以后查看. 注:此项目是MVC架构的. 1.引用文件 项目中引用相应的css和js文件,注意顺序不能打乱,否则富文本编辑器不会正常显示 ...

  5. c#中富文本编辑器Simditor带图片上传的全部过程(项目不是mvc架构)

    描述:最近c#项目中使用富文本编辑器Simditor,记录一下以便以后查看. 注:此项目不是MVC架构的. 1.引用文件 项目中引用相应的css和js文件,注意顺序不能打乱,否则富文本编辑器不会正常显 ...

  6. 百度富文本编辑器整合fastdfs文件服务器上传

    技术:springboot+maven+ueditor   概述 百度富文本整合fastdfs文件服务器上传 详细 代码下载:http://www.demodashi.com/demo/15008.h ...

  7. 富文本之BootStrap-wysiwyg 带图片上传功能

    BootStrap-wysiwyg插件具有良好的编辑功能和展示效果. 一.使用方法在网上有很多,在此记录自己使用过程中的一些问题和解决方式. 相关依赖: bootstrap-wysiwyg.js (核 ...

  8. 现代富文本编辑器Quill的内容渲染机制

    DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师.官方网站:devui.designNg组件库:ng-devui(欢迎S ...

  9. 富文本编辑器Quill的使用

    我们经常需要使用富文本编辑器从后台管理系统上传文字,图片等用于前台页面的显示,Quill在后台传值的时候需要传两个参数,一个用于后台管理系统编辑器的显示,一个用前台页面的显示,具体代码如下截图: 另Q ...

  10. Quill 富文本编辑器

    Quill 富文本编辑器 https://quilljs.com/ https://github.com/quilljs/quill https://github.com/quilljs/awesom ...

随机推荐

  1. C转C++ 个人总结

    # C转C++ 个人总结 1.使用C++的好处 2.using namespace std 3.cin和cout #include<iostream> //必备的头文件 using nam ...

  2. Hugging Face 分词器新增聊天模板属性

    一个幽灵,格式不正确的幽灵,在聊天模型中游荡! 太长不看版 现存的聊天模型使用的训练数据格式各各不同,我们需要用这些格式将对话转换为单个字符串并传给分词器.如果我们在微调或推理时使用的格式与模型训练时 ...

  3. 挑战程序设计竞赛 2.2 poj 3040 Allowance 贪心

    https://vjudge.csgrandeur.cn/problem/POJ-3040 /* 作为创纪录的牛奶产量的奖励,约翰决定每周给贝西一小笔零用钱.FJ拥有一组N(1 <= N < ...

  4. Codeforces Round 905 Div 1 (CF1887)

    A1. Dances (Easy version) 把 \(a,b\) 序列都从小到大排序,\(a\) 贪心删大的,\(b\) 贪心删小的,二分答案并 \(O(n)\) \(\text{check}\ ...

  5. CSS3 rgb and rgba(透明色)的使用

    作者:WangMin 格言:努力做好自己喜欢的每一件事 对于颜色相信大家都很敏感,眼睛所见之处都存在颜色,那在css中我们用什么来表示颜色呢?CSS 中的颜色有三种定义方式:使用颜色方法(RGB.RG ...

  6. 互联网那些技术 | 扒一扒互联网Markdown的那些事儿

    最近感觉到 Markdown 似乎已成为各大社区的编辑器标配所支持的格式,侧面看来其设计之初的目标 " to be used as a format for writing for the ...

  7. 树莓派4b部署samba服务实现文件共享

    注意 samba 生命力很旺盛,软件是在不断更新的, 网上很多针对 samba 网速优化设置截止当前 实测发现有很多已经过期, 甚至有些设置会适得其反,使传输速度更低. 例如, 全网都在配置的参数,& ...

  8. Android 面试知识总结

    Android知识点 1. 四大组件 分别是Activity.Service.ContentProvider.BroadcastReceiver. Activity称为活动,属于展示型组件,主要负责显 ...

  9. 微信小程序直播接入指南

    微信小程序直播接入指南 小程序直播组件接入指引 一.简介 小程序直播,是微信提供给小程序开发者的直播组件.通过调用该组件,商家可以在小程序中实现直播功能. 按下面的使用说明接入,在你的小程序中引入直播 ...

  10. Langchain使用自己定义的tool

    Langchain使用自己定义的tool 快速开始 tool是agent可用于与世界交互的功能.这些工具可以是通用实用程序(例如搜索).其他链,甚至是其他代理. 目前,可以使用以下代码片段加载工具: ...