转载:THINKPHP代码中 lxepoo的文章

有时候我们会发现,我们需要对上传文件进行日志记录,这样的记录通常写在LOG文件或数据库中,那么,通过TP本身的上传类,可以实现的,但是只能做到编辑器外上传并记录,而我们在编辑器内上传的图片、附件却无法捕获,所以这里我分享一个我写的小代码片段,仅供参考。
首先如果你不知道ckeditor,那么请忽略此文,谢谢。

当我们在模板中,将ckeditor配置好后,需要在JS代码中进行一些调整或修改,如下:

CKEDITOR.replace( 'v_content', {
filebrowserImageUploadUrl : '/Files/ck_upload.shtml'
});

复制代码
这里是在JS部分进行了修改,指定了当使用编辑器的图片功能时,上传的请求地址在那里。一般来说ckeditor是不带上传的,你把上面的配置调整好后,点击图片,就会出现上传功能,但是只是个架子,没有实际效果。具体的处理请看下面:

function ck_upload($ftype = 'image')
{
if($ftype == 'image'){
$ftype = array('jpg', 'gif', 'png', 'jpeg', 'bmp');
}
header("Content-type:text/html");
import('ORG.Net.UploadFile');
$upload = new UploadFile(); // 实例化上传类
$upload->maxSize = -1; // 设置附件上传大小
$upload->allowExts = $ftype; // 设置附件上传类型
$upload->savePath = './Public/Uploads/'; // 设置附件上传目录
$upload->autoSub = true;
$upload->subType = 'date';
if (!$upload->upload()) {// 上传错误提示错误信息
echo "<script type=\"text/javascript\">window.parent.CKEDITOR.tools.callFunction(".$this->_get('CKEditorFuncNum').", '/', '上传失败," . $upload->getErrorMsg() . "!');</script>";
} else {
//// 上传成功 获取上传文件信息并存入数据库
$info = $upload->getUploadFileInfo();
    //获取具体的路径,用于返回给编辑器
$savepath = $info[0]['savepath'].$info[0]['savename'];
//下面的输出,会自动的将上传成功的文件路径,返回给编辑器。
echo "<script type=\"text/javascript\">window.parent.CKEDITOR.tools.callFunction(".$this->_get('CKEditorFuncNum').",'$savepath','');</script>";
}
}

复制代码
会发现TP的代码里,有两端是输出JS的,一个是报错,一个是返回图片,这个自己看一下,就能懂的。很简单的。

上传完成后,如下图,我使用的是防盗链模式,所以图片路径是.shtml,如果你按照上面的方式,那么你的返回路径可能是upload/img/abc.jpg之类的。

代码肯定没问题的,我N个项目里在用,这样做的目的是,我能控制文件了,能控制它的上传时间,对文件进行权限管理等等,这些都是很方便的。另外,在附送一个防盗链的方法,前提是,将图片路径存在数据库里。

我这里,文件的表示使用的是id标示:

function getfile($id) {
$res = M('files')->find($id);
$file = $res['savepath'];
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-Transfer-Encoding: binary');
header('Pragma: public');
$sTmpVar = fread(fopen($file, 'r'), filesize($file));
echo $sTmpVar;
}
}

复制代码
将就看下把,$res['savepath']就是数据库里的文件路径,这个方法照抄就行了。这样你就能把upload/img/xxx.jpg转化成诸如file/1022.shtml之类的URL了,防盗链和权限还不是你说了算?呵呵。

半夜了,写的比较匆忙,大家有兴趣试一下,有问题可以留言,我会抽时间回复一下的。

如何将CKeditor编辑器的上传和thinkphp结合的更多相关文章

  1. (配置)CKEditor+CKFinder+php上传配置,根据年月命名创建文件夹来存放

    CKEditor+CKFinder+php上传配置 新版本的CKEditor只提供了基本的文本编辑功能,上传模块由另一个组件CKFinder.这里主要记录CKFinder上传的一些参数配置,能够成功上 ...

  2. dedecms 5.7文章编辑器附件上传图标不显示

    我最近发现在使用dedecms 5.7文章编辑器附件上传图标不显示了,以前是没有问题的,这个更新系统就出来问题了,下面我来给大家分享此问题解决办法.   问题bug:在dedecms 5.7中发现了一 ...

  3. 【HTML5+MVC4】xhEditor网页编辑器图片上传

    准备工作: 创建一个MVC项目中,添加好xhEditor插件 相关用法:http://www.cnblogs.com/xcsn/p/4701497.html 注意事项:xhEditor分为v1.1.1 ...

  4. 百度编辑器前后端二开图片上传Js Thinkphp tp5 ueditor

    百度编辑器图片上传Jsueditor.all.min.js 下载链接 链接:https://pan.baidu.com/s/1VNgw9ELgRRHKeCQheFkQTw 提取码:fnfi 使用方法: ...

  5. ThinkPHP3.1.3 整合 UEditor百度编辑器 图片上传

    第一步.前端模板实例化百度编辑器 <js file='__ROOT__/Data/UEditor/ueditor.config.js' /> <js file='__ROOT__/D ...

  6. 使用struts2完成ckeditor和图片上传

    代码地址如下:http://www.demodashi.com/demo/12427.html 使用struts2完成ckeditor和ckeditor图片上传 ckeditor版本ckeditor_ ...

  7. CKEditor实现图片上传

    本人用的CKEditor版本为4.3 CKEditor配置和部署参考CKEditor4.x部署和配置. CKEditor编辑器的工具栏中初始的时候应该是这样子的,没有图片上传按钮 并且预览中有一堆火星 ...

  8. 用CKEDITOR 做自助上传的解决方案2

    1,在plugins下新建文件夹 multiimg 2,创建文件plugin.js (function() { CKEDITOR.plugins.add("multiimg", { ...

  9. struts2+ckeditor配置图片上传

    又是一个漫漫长夜. 公司的编辑器坏了,用的是百度编辑器,上传图片的网址被框架给拦截了,我们本地怎么测试都没问题,放到服务器就这样了.和老李找了半天,疯了,没原因的. 笔者以前用过jsp+ckedito ...

随机推荐

  1. 关于node.js的误会

    昨天写了篇博客,介绍了一下我对node.js的第一次亲密接触后的感受,以为node.js很小众,出乎我意料很多人感兴趣,并且对博客中的细节问题做了评论,最多的是围绕node.js的异步与单线程展开的, ...

  2. Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明

    上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>介绍了如何通过通用接口获取AccessToken,有了AccessToken,我们就可以来操作 ...

  3. Node.js与Sails~Model数据模型

    回到目录 对于Sails来说,它的Model与数据库对应,不过它并没有采用目前比较流行的poco贫血模型,而是采用了类似DDD的充血模型,即它的数据实体里即有数据库字段(属性)而且还有方法,而模型里的 ...

  4. MySQL的Grant命令[转]

    本文实例,运行于 MySQL 5.0 及以上版本. MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删 ...

  5. Atitit dsl exer v3 qb3 新特性

    Atitit dsl exer v3 qb3 新特性 /atiplat_cms/src/com/attilax/dsl/DslParser.java V3 支持typeed参数,与简化的notyp参数 ...

  6. 如何使用ITEXTSHARP将HTML代码字符串写进PDF

    原文 如何使用ITEXTSHARP将HTML代码字符串写进PDF itextsharp包括一个简单的类,可以用来根据html代码或字符串创建pdf文件.使用此类,你可以使用短短几行代码,就将 HTML ...

  7. struts2DMI(动态方法调用)

    struts2动态方法调用共有三种方式: 1.通过action元素的method属性指定访问该action时运行的方法 <package name="action" exte ...

  8. 后端码农谈前端(CSS篇)第八课:继承与层叠

    一.继承 继承:所谓CSS样式继承,就是子元素应用父元素的规则声明.(由这一特性,可将CSS属性分为可继承属性和非可继承属性.)可继承属性:属性值可由父元素继承给子元素的属性称之为可继承属性. 哪些属 ...

  9. JavaScript的学习--生成二维码

    有一些耗cpu的计算,完全可以在客户端上计算,比如生成二维码. qrcode其实是通过计算,然后使用jquery实现图形渲染和画图.支持canvas和table两种方式生成我们所需的二维码. 具体用法 ...

  10. javascript学习总结(三):如何较好的使用js。

    1 假如浏览器不支持JavaScript怎么办? a.为什么浏览器会不支持?大部分浏览器都有禁用脚本的功能,例如chrome.b.在js被禁用的情况下要保证网页仍能实现它的核心功能(关键的用户需求) ...