kindeditor 粘贴网络图片保存到服务器
人老了,记忆也衰退了。写代码时,只有思路,具体写起来确总忘这忘那。还有的特性或功能,脑子里朦胧记得曾经看到过或曾经写过却总也记不起来。在网上找好多人的文章也就是转载别人,而图片因原作者空间失效而失效。于是想在自己blog 在转载好文章备份时,能顺便把里面图片也保存到自己服务器上。
由于对javascript 的了解不够深入,要在一个完全陌生的编辑器上做插件还真有点困难,加上php 也不是常用,边学边做发了三天终于将这样一个 粘贴网络图片保存到服务器 小插件做成功了。
贴出部分代码:
// 图片另存到服务器 editor.addContextmenu({ title : '另存到服务器', click : function() { var img = getImageFromRange(editor.edit.cmd.range, function(img) { return !/^ke-\w+$/i.test(img[0].className); }); var imgsrc = img.attr('src'); K.ajax('./editor/php/saveToServer.php', function(data){var newsrc = K.formatUrl(data.url,'absolute'); editor.exec('insertimage', newsrc, '', '', '', '', ''); editor.hideMenu();} , 'POST' ,{imgurl:imgsrc}); }, cond : function() { return getImageFromRange(editor.edit.cmd.range, function(img) { return !/^ke-\w+$/i.test(img[0].className); }); } });
服务器端代码:
require_once 'JSON.php'; require_once '../../globals.php'; $php_path = ADMIN_ROOT . '/'; $php_url = dirname($_SERVER['PHP_SELF']) . '/../../'; $root_path = $php_path . OPTION::UPLOADFILE_PATH.'image/netimg/'; $root_url = $php_url . OPTION::UPLOADFILE_PATH.'image/netimg/'; set_time_limit(0); $filepath=urldecode($_POST['imgurl']); $imgArray=array('.gif','.jpg','.png','.jpeg','.bmp'); $typeArray=array(); ob_start(); $type=strrchr(trim($filepath),"."); $result = false; if($filepath!='' && in_array($type,$imgArray)) { $now=time(); $filename=$now.strrchr(trim($filepath),"."); //$filename=md5_file(trim($files[$i])).strrchr(trim($files[$i]),"."); $ret = create_folders($root_path); if($ret != false){ $savetime=SaveHTTPFile(trim($filepath),$root_path.$filename); $result = true; } } ob_end_flush(); if($result){ header('Content-type: text/html; charset=UTF-8'); $json = new Services_JSON(); echo $json->encode(array('error' => 0, 'url' => $root_url.$filename)); exit; }else{ alert('创建目录失败!'); } function getmicrotime(){ list($usec, $sec) = explode(" ",microtime()); return ((float)$usec + (float)$sec); } function SaveHTTPFile($fFileHTTPPath,$fFileSavePath) { //记录程序开始的时间 $BeginTime=getmicrotime(); //取得文件的内容 ob_start(); readfile($fFileHTTPPath); $img = ob_get_contents(); ob_end_clean(); //$size = strlen($img); //保存到本地 $fp2=@fopen($fFileSavePath, "a"); fwrite($fp2,$img); fclose($fp2); //记录程序运行结束的时间 $EndTime=getmicrotime(); //返回运行时间 return($EndTime-$BeginTime); }