富文本编辑器 - wangEditor 上传图片

效果:

项目结构图:

wangEditor-upload-img.html代码:

<html>
	<head>
		<title>wangEditor-图片上传</title>
		<link rel="stylesheet" href="wangEditor/css/wangEditor-1.3.0.min.css">

		<style type="text/css">
			.wrap{
				margin:30px 30px 0 30px;
			}
			#txt_wangEditor{
				width:100%;
				height:300px;
			}
		</style>
	</head>
	<body>
		<!--上传-->
		<div id="uploadContainer">
			<input type="button" value="选择文件" id="btnBrowse"/>
			<input type="button" value="上传文件" id="btnUpload">
			<ul id="fileList"></ul>
		</div>
		<!--富文本编辑器-->
		<div class="wrap">
			<textarea id="txt_wangEditor"></textarea>
			<input type="button" id="submit" value="获取内容">
		</div>

		<!-- JQuery -->
		<script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
		<!-- wangEditor-富文本编辑器 -->
		<script type="text/javascript" src="wangEditor/js/wangEditor-1.3.5.min.js"></script>
		<!-- plupload-上传组件 -->
		<script type="text/javascript" src="plupload/plupload.full.min.js"></script>
		<!-- js -->
		<script type="text/javascript">
			$(document).ready(function(){
				//获取dom节点
				var $uploadContainer = $(‘#uploadContainer‘),
						$fileList = $(‘#fileList‘),
						$btnUpload = $(‘#btnUpload‘);

				//实例化富文本编辑器
				var editor = $(‘#txt_wangEditor‘).wangEditor({
					//重要:传入 uploadImgComponent 参数,值为 $uploadContainer
					uploadImgComponent: $uploadContainer,
					//表情
					 ‘expressions‘:geticon()
				});

				//实例化一个上传对象
				var uploader = new plupload.Uploader({
					browse_button: ‘btnBrowse‘,
					url: ‘upload.php‘,
					flash_swf_url: ‘plupload/Moxie.swf‘,
					sliverlight_xap_url: ‘plupload/Moxie.xap‘,
					filters: {
								mime_types: [
								  //只允许上传图片文件 (注意,extensions中,逗号后面不要加空格)
								  { title: "图片文件", extensions: "jpg,gif,png,bmp" }
								]
						}
				});

				//存储多个图片的url地址
				var urls = [];

				//重要:定义 event 变量,会在下文(触发上传事件时)被赋值
				var event;

				//初始化
				uploader.init();

				//绑定文件添加到队列的事件
				uploader.bind(‘FilesAdded‘, function (uploader, files) {
						//显示添加进来的文件名
					$.each(files, function(key, value){
						var fileName = value.name,
							html = ‘<li>‘ + fileName + ‘</li>‘;
						$fileList.append(html);
					});
				});

				//单个文件上传之后
				uploader.bind(‘FileUploaded‘, function (uploader, file, responseObject) {
						//从服务器返回图片url地址
					var url = responseObject.response;
						//先将url地址存储来,待所有图片都上传完了,再统一处理
					urls.push(url);
					});

					//全部文件上传时候
				uploader.bind(‘UploadComplete‘, function (uploader, files) {
					// 用 try catch 兼容IE低版本的异常情况
					try {
						//打印出所有图片的url地址
						$.each(urls, function (key, value) {
							//重要:调用 editor.command 方法,把每一个图片的url,都插入到编辑器中
							//重要:此处的 event 即上文定义的 event 变量
							editor.command(event, ‘insertHTML‘, ‘<img src="‘ + value + ‘"/>‘);
						});
					} catch (ex) {
						// 此处可不写代码
					} finally {
						//清空url数组
						urls = [];

						//清空显示列表
						$fileList.html(‘‘);
					}
				});

				//上传事件
				$btnUpload.click(function(e){
					//重要:将事件参数 e 赋值给 上文定义的 event 变量
					event = e;
					uploader.start();
				});

			})
		</script>
	</body>
</html>

upload.php代码:

<?php
	$targetDir = ‘upload_tmp‘;
	$uploadDir = ‘upload‘;

	$cleanupTargetDir = true; 

	if (!file_exists($targetDir)) {
		@mkdir($targetDir);
	}

	if (!file_exists($uploadDir)) {
		@mkdir($uploadDir);
	}

	if (isset($_REQUEST["name"])) {
		$fileName = $_REQUEST["name"];
	} elseif (!empty($_FILES)) {
		$fileName = $_FILES["file"]["name"];
	} else {
		$fileName = uniqid("file_");
	}
	$fileName = iconv(‘UTF-8‘, ‘GB2312‘, $fileName);
	$filePath = $targetDir . DIRECTORY_SEPARATOR . $fileName;
	$uploadPath = $uploadDir . DIRECTORY_SEPARATOR . $fileName;

	$imgUrl="http://localhost:8088/FileUpload/".$uploadDir."/".$fileName;
	echo $imgUrl;

	$chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0;
	$chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 1;

	if ($cleanupTargetDir) {
		if (!is_dir($targetDir) || !$dir = opendir($targetDir)) {
			die(‘{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}‘);
		}

		while (($file = readdir($dir)) !== false) {
			$tmpfilePath = $targetDir . DIRECTORY_SEPARATOR . $file;

			if ($tmpfilePath == "{$filePath}_{$chunk}.part" || $tmpfilePath == "{$filePath}_{$chunk}.parttmp") {
				continue;
			}

			if (preg_match(‘/\.(part|parttmp)$/‘, $file) && (@filemtime($tmpfilePath) < time() - $maxFileAge)) {
				@unlink($tmpfilePath);
			}
		}
		closedir($dir);
	}

	if (!$out = @fopen("{$filePath}_{$chunk}.parttmp", "wb")) {
		die(‘{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}‘);
	}

	if (!empty($_FILES)) {
		if ($_FILES["file"]["error"] || !is_uploaded_file($_FILES["file"]["tmp_name"])) {
			die(‘{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}‘);
		}

		if (!$in = @fopen($_FILES["file"]["tmp_name"], "rb")) {
			die(‘{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}‘);
		}
	} else {
		if (!$in = @fopen("php://input", "rb")) {
			die(‘{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}‘);
		}
	}

	while ($buff = fread($in, 4096)) {
		fwrite($out, $buff);
	}

	@fclose($out);
	@fclose($in);

	rename("{$filePath}_{$chunk}.parttmp", "{$filePath}_{$chunk}.part");

	$index = 0;
	$done = true;
	for( $index = 0; $index < $chunks; $index++ ) {
		if ( !file_exists("{$filePath}_{$index}.part") ) {
			$done = false;
			break;
		}
	}
	if ( $done ) {
		if (!$out = @fopen($uploadPath, "wb")) {
			die(‘{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}‘);
		}

		if ( flock($out, LOCK_EX) ) {
			for( $index = 0; $index < $chunks; $index++ ) {
				if (!$in = @fopen("{$filePath}_{$index}.part", "rb")) {
					break;
				}

				while ($buff = fread($in, 4096)) {
					fwrite($out, $buff);
				}

				@fclose($in);
				@unlink("{$filePath}_{$index}.part");
			}

			flock($out, LOCK_UN);
		}
		@fclose($out);
	}

原版视频及其源码:http://www.kancloud.cn/wangfupeng/wangeditor/65747

时间: 2024-11-10 01:01:24

富文本编辑器 - wangEditor 上传图片的相关文章

轻量级富文本编辑器wangEditor源码结构介绍

1. 引言 wangEditor——一款轻量级html富文本编辑器(开源软件) 网站:http://www.wangeditor.com/ demo演示:http://www.wangeditor.com/wangEditor/demo.html 下载(github):https://github.com/wangfupeng1988/wangEditor QQ群:164999061 从我发布wangEditor到现在,大概有七八个月了,随着近期增加的插入视频,表情,地图这三个功能,目前为止基本

KindEditor - 富文本编辑器 - 使用+上传图片

效果: 项目结构: Extend:存放各种扩展 BlogAction.class.php:博文模块 addBlog.html:添加博文页面 Html代码: 只是用一个核心文件也可,也可以加入其他js文件,比如语言包,扩展包. addBlog.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transiti

富文本编辑器 - wangEditor 插入代码

效果: 项目结构: 注意事项: highlightJS 代码高亮插件,wangEditor 本身就是集成的highlightJS代码高亮插件. 在wangEditor-1.3.12.js里找到var hashljs = flase,把它改成var hashljs = true,然后引入JS和css. 调整代码的字体和大小: 代码: 原始连接: http://www.sojson.com/blog/36 http://www.kancloud.cn/wangfupeng/wangeditor/65

Laravel-admin安装富文本编辑器 WangEditor

查看手册 组件管理 https://laravel-admin.org/docs/zh/model-form-field-management.md#%E9%9B%86%E6%88%90%E5%AF%8C%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91%E5%99%A8wangeditor 参考 https://blog.csdn.net/xiaoyue_t/article/details/84636043 原文地址:https://www.cnblogs.com/pol

重构wangEditor(web富文本编辑器),欢迎指正!

1. 前言 (下载源码.使用说明.demo,请参见:https://github.com/wangfupeng1988/wangEditor) 前段时间做过一个基于bootstrap的富文本编辑器--wangEditor,并发布到github上(https://github.com/wangfupeng1988/wangEditor),在博客园写了篇文章(http://www.cnblogs.com/wangfupeng1988/p/4088229.html)也受到了不少关注. 之所以有这次重构

基于bootstrap的富文本框——wangEditor【欢迎加入开发】

先来一张效果图: 01. 引言 老早就开始研究富文本框的东西,在写完<深入理解javascript原型与闭包>之后,就想着要去做一个富文本框的插件的例子. 现在网络上开源的富文本框插件非常多,一搜索一大堆,但是基于bootstrap的还不多,现在只有一个“bootstrap-wysiwyg”,老外写的,没有一个汉字,大家可以fork一下源码看看,写的非常简洁,压缩之后不到10KB,非常厉害!我也还没来得及研究,一定要看一下. 02. wangEditor 老外的东西,满地英文,给程序猿用着还可

基于bootstrap的富文本框——wangEditor【欢迎增加开发】

先来一张效果图: 01. 引言 老早就開始研究富文本框的东西,在写完<深入理解javascript原型与闭包>之后,就想着要去做一个富文本框的插件的样例. 如今网络上开源的富文本框插件许多,一搜索一大堆,可是基于bootstrap的还不多.如今仅仅有一个"bootstrap-wysiwyg".老外写的,没有一个汉字.大家能够fork一下源代码看看,写的很简洁.压缩之后不到10KB.很厉害!我也还没来得及研究,一定要看一下. 02. wangEditor 老外的东西,满地英文

BBS第四天之文章详情,点赞点踩,根子评论,后台展示,文章添加(富文本编辑器)

一.文章详情 路由url.py: url(r'^(?P<username>\w+)/article/(?P<pk>\d+)$', views.article_detail), 点击个人站点文章title即可关联到文章详情路由找到其视图函数 views.py: def article_detail(request,username,pk): user = models.UserInfo.objects.filter(username=username).first() if not

django项目中使用KindEditor富文本编辑器

先从官网下载插件,放在static文件下 前端引入 <script type="text/javascript" src="/static/back/kindeditor/kindeditor-all.js"></script> <script> KindEditor.ready(function (K) { window.editor = K.create('#content', { {# 加上这句话可以使jquery能获取到富