后果:服务器上存在无用图片。
我的解决方案:
1、编辑器中上传图片时,统一上传到一固定临时目录tmp。
2、表单提交成功后,移动图片到指定目录,同时修改文本内容中图片地址到指定路径。
<script type="text/javascript">
var editor;
KindEditor.ready(function(K) {
editor = K.create('textarea[name="content"]', {
allowFileManager : true,
uploadJson : "{:U('Public/Public/upload')}", //kindeditor编辑器图片上传请求url
uploadFilePath : 'Public/Upload/tmp/', //文件上传临时目录,这里曾经改过kindeditor代码,可以直接在后端指定。
items : [
'image', 'media', 'emoticons', 'link'
]
});
})
</script>
<?php
/**
* Kindeditor上传回调接口
*/
public function upload(){
$this->hasPriv(); //判断是否登录
import("ORG.Net.UploadFile");
$upload = new UploadFile();
$dir_name = empty($_GET['dir']) ? 'image' : trim($_GET['dir']);
$ext = array(
'image' => array('gif', 'jpg', 'jpeg', 'png', 'bmp'),
'flash' => array('swf', 'flv'),
'media' => array('swf', 'flv', 'mp3', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb'),
'file' => array('doc', 'docx', 'xls', 'xlsx', 'ppt', 'htm', 'html', 'txt', 'zip', 'rar', 'gz', 'bz2'),
);
$upload->allowExts = $ext[$dir_name];
$upload->maxSize = $dir_name == 'image' ? 2048000 : 102400000;
$upload->savePath = I('post.uploadFilePath');
if(!$upload->upload()){
echo json_encode(array('error' => 1,'message' => $upload->getErrorMsg()));
exit;
}
$uploadFileInfo = $upload->getUploadFileInfo();
echo json_encode(array('error' => 0,'url' => __ROOT__.'/'.$uploadFileInfo[0]['savepath'] . $uploadFileInfo[0]['savename']));
exit;
}
/**
* 发表文章
*/
public function add(){
if(IS_AJAX){
$data = $_POST['key']; //表单提交数据
$data['uid'] = $this->_user['uid'];
$Ta = D('Article');
$text_do_pic = text_do_pic($data['content'],'Public/Upload/travelcomment/'); //修改文章内容中的图片地址
$data['content'] = $text_do_pic[0];
if(!$Ta->create($data))
$this->ajaxReturn('',$Tc->getErrorMsg(),0);
if(!$Ta->add())
$this->ajaxReturn('','失败!',0);
// 文章发表成功,移动图片到指定目录
foreach($text_do_pic[1] as $k => $v) {
if(!rename($v,$text_do_pic[2][$k]))
Log::write('Fail:[文章id:'.$Ta->tid.']','INFO',3,'./Public/Data/logs/article_add_'.date('y_m_d').'.log'); //移动失败,写入log
}
$this->ajaxReturn('','成功!',1);
}
}
//写在common.php中的函数。修改编辑器中上传的文本内容中的图片地址为指定目录地址。
function text_do_pic(&$text,$path){
preg_match_all('/<img src=\"(\/.*[\.gif|\.jpg|\.png|\.jpeg])\".*\/>/',$text, $matches);
$dir = $path.date('Ymd').'/';
mkdir($dir, true);
foreach($matches[1] as $k => $v){
$tof = strpos($v,__ROOT__);
$name[] = false === $tof ? $v : substr($v, strlen(__ROOT__.'/'));
$rename[] = $dir.basename($v);
$rename2 = false === $tof ? $rename[$k] : __ROOT__.'/'.$rename[$k];
if(is_file($name[$k])){
$searchs[] = $matches[0][$k];
$replace[] = str_replace($v, $rename2, $matches[0][$k]);
}
}
return array(str_replace($searchs, $replace, $text),$name,$rename);
}
?>更好的方案:估计是采用图片空间管理,让用户自己删除多余的图片,限制用户的总容量。
最佳答案