【NKeditor】富文本编辑器上传图片

news2024/11/26 11:28:33

目录

目的:

效果

实现方法:

1、下载NKeditor插件库

2、部署

3、实现

4、自定义工具栏


目的:

使用NKeditor富文本编辑器上传图片,同时上传到七牛云存储上。后端语言使用ThinkPHP。

效果

实现方法:

1、下载NKeditor插件库

下载地址:NKeditor: NKedtior是一款优秀的轻量级Web编辑器,基于 Kindedior 二次开发

里面的文档demo写的比较详细,可以直接使用,不过里面上传七牛云的代码不能用,所以我是自己写的。 

2、部署

 把下载的NKeditor插件库放到/public/文件夹下。

3、实现

前端代码


<link href="/NKeditor/libs/bootstrap/bootstrap.min.css" rel="stylesheet">

<div role="tabpanel" class="tab-pane fade" id="default">
	<form name="example" method="post">
		<textarea name="content2" style="width:900px;height:500px;visibility:hidden;"></textarea>
	</form>
</div>


<script charset="utf-8" src="/NKeditor/NKeditor-all.js"></script>
<!-- 如果你不需要使用批量图片上传,涂鸦功能和文件管理功能,就不需要引入 jquery -->
<script charset="utf-8" src="/NKeditor/libs/jquery.min.js"></script>
<!-- JDialog是一款优秀的漂亮,轻量级的js弹出框插件 不是必须引入的,如果不引入则使用默认的 window.alert() 来弹出提示信息 -->
<script charset="utf-8" src="/NKeditor/libs/JDialog/JDialog.min.js"></script>
<script src="/NKeditor/libs/bootstrap/bootstrap.min.js"></script>

<script>
KindEditor.ready(function(K) {
	
	K.create('textarea[name="mytextarea"]', {
		uploadJson : '/teacher/qiniu/uploadImg',
		// fileManagerJson : K.basePath+'php/qiniu/file_manager_json.php',
		dialogOffset : 0, //对话框距离页面顶部的位置,默认为0居中,
		allowFileManager : false,
		allowImageUpload : true,
		allowMediaUpload : false,
		items : ['source','undo','redo','preview','print','code','quote','plainpaste','justifyleft','justifycenter','justifyright','justifyfull','insertorderedlist','insertunorderedlist','indent','outdent','subscript','superscript','clearhtml','quickformat','selectall','formatblock','fontname','fontsize','forecolor','hilitecolor','bold','italic','underline','strikethrough','lineheight','removeformat','image','table','tablecell','hr','baidumap','pagebreak','link','unlink','fullscreen'
        ],
		afterCreate : function() {
			var self = this;
			K.ctrl(document, 13, function() {
				self.sync();
				K('form[name=example]')[0].submit();
			});
			K.ctrl(self.edit.doc, 13, function() {
				self.sync();
				K('form[name=example]')[0].submit();
			});
		},
		showHelpGrid: false, // 是否显示输入辅助线
		themeType : "black", //主题
		//错误处理 handler
		errorMsgHandler : function(message, type) {
			try {
				JDialog.msg({type:type, content:message, timer:2000});
			} catch (Error) {
				alert(message);
			}
		}
	});
})
</script>

后端代码:返回值是json,返回格式与下面代码一致。

<?php
namespace app\teacher\controller;
use think\Controller;
use Qiniu\Auth as Auth;
use Qiniu\Storage\BucketManager;
use Qiniu\Storage\UploadManager;

/**
 * 七牛云操作
 */
class Qiniu extends Base
{

	public function uploadImg()
	{
		error_reporting(0);

		vendor('qiniu.autoload');
		$accessKey = config('ACCESSKEY');
		$secretKey = config('SECRETKEY');
		$bucket = config('BUCKET');
		$domain = config('DOMAIN');

		$fileType = trim($_GET['fileType']);

		if (empty($fileType)) {
		    $fileType = "image";
		}

		// 要上传图片的本地路径
		$filePath = $_FILES['imgFile']['tmp_name'];

		$ext = substr($_FILES['imgFile']['name'],strrpos($_FILES['imgFile']['name'],'.')+1);  //文件后缀
		 // 后缀大写转换成小写
		 $ext = strtolower($ext);

		$format = array('png','jpg','gif','jpeg','bmp','tif','svg','webp');  //允许上传的格式
		if (!in_array($ext,$format)) {
			$result = array(
		        'code'=>'001',
		        'message'=>'格式错误'
		    );
		}

		// 上传到七牛后保存的文件名
		$key = 'shouyi_img/'.substr(md5($filePath) , 0, 5) .'/'. date('YmdHis') . rand(0, 9999) . '.' . $ext;

		// 构建鉴权对象
		$auth = new Auth($accessKey, $secretKey);

		$token = $auth->uploadToken($bucket);

		// 初始化 UploadManager 对象并进行文件的上传
		$uploadMgr = new UploadManager();

		// 调用 UploadManager 的 putFile 方法进行文件的上传
		list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);

		// var_dump($ret);
		if ($err !== null) {

			$result = array(
		        'code'=>'001',
		        'message'=>'上传失败'
		    );

	    } else {
	    	$result = array(
		        'code'=>'000',
		        'message'=>'上传成功'.$_FILES['imgFile']['name'],
		        'data'=>array('url' => $domain . $ret['key']),
		    );
	    }

	    die(json_encode($result,JSON_UNESCAPED_UNICODE));
	}
}

文件上传到七牛云可参看之前写的文章:【七牛云】使用PHP把文件上传到七牛云_php 七牛云上传_下页、再停留的博客-CSDN博客

4、自定义工具栏

在items根据需要添加相应的功能

    source : 'HTML代码',
    preview : '预览',
    undo : '后退(Ctrl+Z)',
    redo : '前进(Ctrl+Y)',
    cut : '剪切(Ctrl+X)',
    copy : '复制(Ctrl+C)',
    paste : '粘贴(Ctrl+V)',
    plainpaste : '粘贴为无格式文本',
    wordpaste : '从Word粘贴',
    selectall : '全选(Ctrl+A)',
    justifyleft : '左对齐',
    justifycenter : '居中',
    justifyright : '右对齐',
    justifyfull : '两端对齐',
    insertorderedlist : '编号',
    insertunorderedlist : '项目符号',
    indent : '增加缩进',
    outdent : '减少缩进',
    subscript : '下标',
    superscript : '上标',
    formatblock : '段落',
    fontname : '字体',
    fontsize : '文字大小',
    forecolor : '文字颜色',
    hilitecolor : '文字背景',
    bold : '粗体(Ctrl+B)',
    italic : '斜体(Ctrl+I)',
    underline : '下划线(Ctrl+U)',
    strikethrough : '删除线',
    removeformat : '删除格式',
    image : '图片',
    multiimage : '批量图片上传',
    graft : '涂鸦',
    flash : 'Flash',
    media : '视音频',
    table : '表格',
    tablecell : '单元格',
    hr : '插入横线',
    emoticons : '插入表情',
    link : '超级链接',
    unlink : '取消超级链接',
    fullscreen : '全屏显示',
    about : '关于',
    print : '打印(Ctrl+P)',
    filemanager : '文件空间',
    code : '插入程序代码',
    quote : '插入引用',
    map : 'Google地图',
    baidumap : '百度地图',
    lineheight : '行距',
    clearhtml : '清理HTML代码',
    pagebreak : '插入分页符',
    quickformat : '一键排版',
    insertfile : '插入文件',
    template : '插入模板'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/977027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【构造】CF Edu 12 D

Problem - D - Codeforces 题意&#xff1a; 思路&#xff1a; 这种题一定要从小数据入手&#xff0c;不然很有可能走歪思路 先考虑n 1的情况&#xff0c;直接输出即可 然后是n 2的情况&#xff0c;如果相加是质数&#xff0c;就输出2个&#xff0c;否则就输出一个 然后…

使用 【jacoco】对基于 SpringBoot 和 Dubbo RPC 的项目生成测试覆盖率报告:实践+原理

基于 Dubbo RPC 的项目中有一个提供者项目backend、一个消费者项目gateway、以及注册中心nacos。本篇文章记录在windows本地对该框架的测试过程&#xff0c;以及介绍jacoco的基本原理 测试过程 官网下载安装包解压到本地&#xff0c;https://www.jacoco.org/jacoco/ 只需要用…

Bootstrap的标题类(标题样式h1~h6)

Bootstrap 的标题字体大小通常遵循以下样式规则&#xff1a; h1 标题的字体大小为 2.5rem&#xff08;40像素&#xff09;。h2 标题的字体大小为 2rem&#xff08;32像素&#xff09;。h3 标题的字体大小为 1.75rem&#xff08;28像素&#xff09;。h4 标题的字体大小为 1.5re…

《Python魔法大冒险》008 石像怪的挑战:运算符之旅

小鱼和魔法师继续深入魔法森林。不久&#xff0c;他们来到了一个巨大的魔法石圈旁边。石圈中心有一个闪闪发光的魔法水晶&#xff0c;周围则是一些神秘的符号。但令人意外的是&#xff0c;水晶的旁边还有一个巨大的石像怪&#xff0c;它的眼睛散发着红色的光芒&#xff0c;似乎…

CentOS 安装蒲公英

官方教程链接&#xff1a; https://service.oray.com/question/5063.html 教程使用的是2.3版本&#xff0c;官网下载的最新版是2.4&#xff0c;所以命令会有所不同 安装成功后&#xff0c; 任意路径下执行pgyvisitor&#xff0c;调出交互界面pgyvisitor login&#xff0c;登录…

智汇云舟亮相2023服贸会,全面展示视频孪生技术与产品

9月2日-6日&#xff0c;为期5天的2023年中国国际服务贸易交易会&#xff08;以下简称&#xff1a;服贸会&#xff09;在北京首钢园举办。在电信、计算机和信息服务专题展馆中&#xff0c;智汇云舟有幸作为北京市专精特新和数字孪生企业优秀代表受邀参展&#xff0c;并携视频孪生…

【C语言】——调试技巧

目录 ​编辑 ①前言 1.什么是Bug&#xff1f; 2.什么是调试&#xff1f; 2.1调试的基本步骤 2.2Release与Debug 3.常用快捷键 4.如何写出好的代码 4.1常见的coding技巧 &#x1f449;assert() &#x1f449;const() const修饰指针: ①前言 调试是每个程序员都…

计及电池储能寿命损耗的微电网经济调度(matlab代码)

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《考虑寿命损耗的微网电池储能容量优化配置》模型&#xff0c;以购售电成本、燃料成本和储能寿命损耗成本三者之和为目标函数&#xff0c;创新考虑储能寿命损耗约束、放电深度约束和储能循环次…

光电耦合器市场在预测期内预计将以8.99%的复合年增长率增长!

光耦合器是一种用于传输光信号的电子器件。它具有以下特性&#xff1a; 1. 传输性能&#xff1a;光耦合器能够实现光电转化和信号传输&#xff0c;具有良好的传输性能和抗干扰能力&#xff0c;可以避免外部环境的干扰。 2. 隔离性能&#xff1a;光耦合器能够实现电路之间的隔…

hive 基础知识

一 hive 是什么 在本节前我们需要明确 hive 是什么 上面两个代码块&#xff0c;左边的是 mapreduce 的代码块&#xff0c;右边的是hive 的代码块 很容易看出来&#xff0c;右边的 hive 写起来要更容易更快些&#xff0c;而执行效率&#xff0c;右边的 hive 只比左边多一个翻译…

Databend 开源周报第 109 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 利用 Cluster …

Python3学习第十二章 图形用户界面

#!usr/bin/env python # -*- coding:utf-8 _*- """ author:AIvision file: lecture12.py time: 2023/09/05 """ # 第十二章 图形用户界面 # 12.1 创建 GUI 示例应用程序 # 为演示Tkinter的用法&#xff0c;我将介绍如何创建一个简单的GUI应…

Java集合面试

文章目录 Java集合框架说说有哪些常见的集合&#xff1f;ArrayList和LinkedList的区别&#xff1f;HashMap的数据结构&#xff1f;把你了解的所有都讲一讲&#xff1f;数据结构&#xff1a; put流程Hashmap的resize方法的执行过程&#xff1f;get流程JDK8 HashMap为什么引入红黑…

数据库事务概述

1.1 存储引擎支持情况 SHOW ENGINES 命令来查看当前 MySQL 支持的存储引擎都有哪些&#xff0c;以及这些存储引擎是否支持事务。 能看出在 MySQL 中&#xff0c;只有 InnoDB 是支持事务的。 1.2 基本概念 事务&#xff1a; 一组逻辑操作单元&#xff0c;使数据从一种状态…

4.5V 至 23V、TAS2781RYYR音频放大器、QPF4617TR13 Wi-Fi® 6E非线性前端模块和DRV2667RGPR全集成压电式触觉驱动器

一、TAS2781RYYR&#xff0c;具有集成式音频处理和扬声器保护的 25W、4.5V 至 23V 数字输入 D 类放大器 介绍&#xff1a;TAS2781 是一款单声道、数字输入 D 类音频放大器&#xff0c;专为将高峰值功率高效率驱动到扬声器进行了优化。D类放大器在 18V 电源电压下可向 4Ω 负载…

SpringMVC_异常统一处理

3.全局统一异常处理 3.1目前存在问题 模拟后台出现服务器异常 GetMappingpublic ResultResp list(RequestParam(required false) String name){System.out.println(1/0);List<Item> ret service.lists(name);return ResultResp.success(retnull?Code.PAGE_FAIL:Code.…

JVM快速入门篇

一、JVM探究 1.1前言 请你谈谈你对jvm的理解&#xff1f;Java8虚拟机和之前的变化更新&#xff1f;什么是OOM&#xff1f;什么是栈溢出StackOverFlowError&#xff1f;怎么分析&#xff1f;jvm的常见调优参数有哪些&#xff1f;内存快照如何抓取&#xff1f;怎么分析Dump文件&…

RichView Text Box Items 文本框

RichView Text Box Items 文本框 RichView的文本框&#xff08;Text Box&#xff09;&#xff0c;是TRichView文档中的ITEM之一。 通常文本框项目&#xff08;Text Box Item&#xff09;是旁注的简化版本&#xff0c;该项目插入的位置没有可见的文本。 如果rvoShowSpecialChara…

【数学建模竞赛】数据预处理知识总结1——数据清洗

数据预处理是什么 在数学建模赛题中&#xff0c;官方给所有参赛选手的数据可能受到主观或客观条件的影响有一定的问题&#xff0c;如果不进行数据的处理而直接使用的话可能对最终的结果造成一定的影响&#xff0c;因此为了保证数据的真实性和建模结果的可靠性&#xff0c;需要…

中频炉冷循环监测终端,智能化管理冷却系统的新利器!

在现代工业生产中&#xff0c;中频炉是一种广泛应用于金属加工和熔化的设备。 一、中频炉的降温剂 中频炉的使用中&#xff0c;企业往往关注的是中频炉晶闸管、电抗器、电容器、汇流排以及中频炉线圈&#xff0c;忽观中频炉的冷却水。中频炉的冷却水在中频炉、中频加热炉使用…