解决KindEditor无法安装flash插件实现图片批量上传

针对KindEditor在禁用Flash插件环境下图片批量上传功能失效的问题,本文介绍了一种使用jQuery插件替代原有Flash实现的解决方案,确保了老旧项目的图片上传功能正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于现在无法下载使用flash插件,导致KindEditor有的功能丧失,无法使用,本文主要解决图片无法批量上传的问题。

由于公司项目是混编项目,比较老旧且业务复杂,使用KindEditor的地方较多,全部整改换插件工作量较大,短期无法满足业务,顾考虑换一种思路实现,即使用jQuery的图片批量上传插件来替换KindEditor中使用flash的部分,从而实现图片批量上传。

KindEditor中实现图片批量上传的代码主要在multiimage.js文件中,直接下载的KindEditor文件夹没有做其他修改的话,multiimage.js的文件路径为:kindeditor/plugins/multiimage/multiimage.js

修改后的multiimage.js文件中的全部代码:

(function (K) {
	var ZYFILE = {
		fileInput: null,             // 选择文件按钮dom对象
		uploadInput: null,           // 上传文件按钮dom对象
		dragDrop: null,				  //拖拽敏感区域
		url: "",  					  // 上传action路径
		filePostName: "imgFile",  					  // 上传action路径
		uploadFile: [],  			  // 需要上传的文件数组
		lastUploadFile: [],          // 上一次选择的文件数组,方便继续上传使用
		perUploadFile: [],           // 存放永久的文件数组,方便删除使用
		fileNum: 0,                  // 代表文件总个数,因为涉及到继续添加,所以下一次添加需要在它的基础上添加索引
		/* 提供给外部的接口 */
		filterFile: function (files) { // 提供给外部的过滤文件格式等的接口,外部需要把过滤后的文件返回
			return files;
		},
		onSelect: function (selectFile, files) {      // 提供给外部获取选中的文件,供外部实现预览等功能  selectFile:当前选中的文件  allFiles:还没上传的全部文件
		},
		onDelete: function (file, files) {            // 提供给外部获取删除的单个文件,供外部实现删除效果  file:当前删除的文件  files:删除之后的文件
		},
		onProgress: function (file, loaded, total) {  // 提供给外部获取单个文件的上传进度,供外部实现上传进度效果
		},
		onSuccess: function (file, responseInfo) {    // 提供给外部获取单个文件上传成功,供外部实现成功效果
		},
		onFailure: function (file, responseInfo) {    // 提供给外部获取单个文件上传失败,供外部实现失败效果
		},
		onComplete: function (responseInfo) {         // 提供给外部获取全部文件上传完成,供外部实现完成效果
		},
		/* 内部实现功能方法 */
		// 获得选中的文件
		//文件拖放
		funDragHover: function (e) {
			e.stopPropagation();
			e.preventDefault();
			this[e.type === "dragover" ? "onDragOver" : "onDragLeave"].call(e.target);
			return this;
		},
		// 获取文件
		funGetFiles: function (e) {
			var self = this;
			// 取消鼠标经过样式
			this.funDragHover(e);
			// 从事件中获取选中的所有文件
			var files = e.target.files || e.dataTransfer.files;
			self.lastUploadFile = this.uploadFile;
			this.uploadFile = this.uploadFile.concat(this.filterFile(files));
			var tmpFiles = [];
			// 因为jquery的inArray方法无法对object数组进行判断是否存在于,所以只能提取名称进行判断
			var lArr = [];  // 之前文件的名称数组
			var uArr = [];  // 现在文件的名称数组
			$.each(self.lastUploadFile, function (k, v) {
				lArr.push(v.name);
			});
			$.each(self.uploadFile, function (k, v) {
				uArr.push(v.name);
			});
			$.each(uArr, function (k, v) {
				// 获得当前选择的每一个文件   判断当前这一个文件是否存在于之前的文件当中
				if ($.inArray(v, lArr) < 0) {  // 不存在
					tmpFiles.push(self.uploadFile[k]);
				}
			});
			// 如果tmpFiles进行过过滤上一次选择的文件的操作,需要把过滤后的文件赋值
			//if(tmpFiles.length!=0){
			this.uploadFile = tmpFiles;
			//}
			// 调用对文件处理的方法
			this.funDealtFiles();
			return true;
		},
		// 处理过滤后的文件,给每个文件设置下标
		funDealtFiles: function () {
			var self = this;
			// 目前是遍历所有的文件,给每个文件增加唯一索引值
			$.each(this.uploadFile, function (k, v) {
				// 因为涉及到继续添加,所以下一次添加需要在总个数的基础上添加
				v.index = self.fileNum;
				// 添加一个之后自增
				self.fileNum++;
			});
			// 先把当前选中的文件保存备份
			var selectFile = this.uploadFile;
			// 要把全部的文件都保存下来,因为删除所使用的下标是全局的变量
			this.perUploadFile = this.perUploadFile.concat(this.uploadFile);
			// 合并下上传的文件
			this.uploadFile = this.lastUploadFile.concat(this.uploadFile);
			// 执行选择回调
			this.onSelect(selectFile, this.uploadFile);
			return this;
		},
		// 处理需要删除的文件  isCb代表是否回调onDelete方法  
		// 因为上传完成并不希望在页面上删除div,但是单独点击删除的时候需要删除div   所以用isCb做判断
		funDeleteFile: function (delFileIndex, isCb) {
			var self = this;  // 在each中this指向没个v  所以先将this保留
			var tmpFile = [];  // 用来替换的文件数组
			// 合并下上传的文件
			var delFile = this.perUploadFile[delFileIndex];
			// 目前是遍历所有的文件,对比每个文件  删除
			$.each(this.uploadFile, function (k, v) {
				if (delFile != v) {
					// 如果不是删除的那个文件 就放到临时数组中
					tmpFile.push(v);
				}
			});
			this.uploadFile = tmpFile;
			if (isCb) {  // 执行回调
				// 回调删除方法,供外部进行删除效果的实现
				self.onDelete(delFile, this.uploadFile);
			}
			return true;
		},
		// 上传多个文件
		funUploadFiles: function () {
			var self = this;  // 在each中this指向没个v  所以先将this保留
			// 遍历所有文件  ,在调用单个文件上传的方法
			$.each(this.uploadFile, function (k, v) {
				self.funUploadFile(v);
			});
		},
		// 上传单个个文件
		funUploadFile: function (file) {
			var self = this;  // 在each中this指向没个v  所以先将this保留
			var formdata = new FormData();
			formdata.append(self.filePostName, file);
			var xhr = new XMLHttpRequest();
			// 绑定上传事件
			// 进度
			xhr.upload.addEventListener("progress", function (e) {
				// 回调到外部
				self.onProgress(file, e.loaded, e.total);
			}, false);
			// 完成
			xh
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值