人老了,记忆也衰退了。写代码时,只有思路,具体写起来确总忘这忘那。还有的特性或功能,脑子里朦胧记得曾经看到过或曾经写过却总也记不起来。在网上找好多人的文章也就是转载别人,而图片因原作者空间失效而失效。于是想在自己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);
}