核心思路
这个组合的核心工作流程是:

(图片来源网络,侵删)
- 用户操作:在DedeCMS后台使用UEditor编辑器编辑文章。
- 文件上传:点击UEditor的图片、附件上传按钮,文件被发送到DedeCMS的一个专门处理上传的PHP脚本。
- 脚本处理:这个DedeCMS的上传脚本,不再将文件保存到本地服务器,而是调用七牛云的PHP-SDK。
- 七牛上传:通过SDK将文件直接上传到七牛云的存储空间。
- 返回结果:上传成功后,七牛云会返回一个文件的公开URL地址。
- UEditor显示:DedeCMS的脚本将这个URL地址返回给UEditor,UEditor将其插入到编辑器内容中,完成整个上传流程。
第一步:准备工作
在开始之前,请确保你已经准备好以下几样东西:
- 一个已安装的DedeCMS网站:确保你的网站可以正常运行。
- 一个七牛云账号:如果没有,请先注册并实名认证。
- 一个已创建的七牛云存储空间:记录下这个空间的名称。
- 七牛云的 AccessKey 和 SecretKey:在七牛云后台的“个人中心” -> “密钥管理”中获取。
- 一个已备案并绑定的域名:用于配置七牛云的CDN加速域名,这是至关重要的一步,因为最终图片的URL将使用这个域名。
- UEditor编辑器源码:从百度UEditor官网下载最新版的PHP版本。
第二步:安装并配置UEditor到DedeCMS
-
下载UEditor
- 访问 UEditor官网 下载 PHP 版本。
- 下载后,你会得到一个压缩包,解压后你会看到
php、utf8-php、assets等文件夹。
-
上传UEditor文件
- 将解压后的文件夹(通常是
utf8-php版本)通过FTP上传到你的DedeCMS网站根目录下,并重命名为ueditor,你的网站根目录是/wwwroot/,那么路径就是/wwwroot/ueditor/。
- 将解压后的文件夹(通常是
-
修改DedeCMS模板文件
(图片来源网络,侵删)- 登录你的DedeCMS后台,找到
dede/templets/目录。 - 找到
article_add.htm(添加文章) 和article_edit.htm(编辑文章) 这两个文件。 - 备份这两个文件,以防操作失误。
- 在这两个文件中,找到原来的文本域
<textarea>,它的id通常是body或content。 - 用UEditor的初始化代码替换掉原来的
<textarea>,你可以参考ueditor/examples/目录下的示例文件来写这段代码,一个标准的替换代码如下:
<!-- 在 <head> 标签内引入Ueditor的CSS和JS --> <link href="/ueditor/themes/default/css/ueditor.min.css" type="text/css" rel="stylesheet"> <script type="text/javascript" charset="utf-8" src="/ueditor/ueditor.config.js"></script> <script type="text/javascript" charset="utf-8" src="/ueditor/ueditor.all.min.js"></script> <!-- 替换原来的 <textarea> --> <script type="text/plain" id="myEditor" name="body" style="width:100%;height:400px;"> {dede:field.body/} </script> <!-- 实例化编辑器 --> <script type="text/javascript"> var ue = UE.getEditor('myEditor'); </script>- 注意:
- 确保
href和src的路径指向你上传的ueditor文件夹。 <script type="text/plain" id="myEditor">...</script>这部分是UEditor的容器,id必须与UE.getEditor()中的参数一致。name="body"是关键,它确保了提交表单时,编辑器的内容能正确提交给DedeCMS的body字段。
- 确保
- 登录你的DedeCMS后台,找到
-
验证UEditor安装
- 清除浏览器缓存,重新进入DedeCMS后台的“添加文章”页面。
- 如果能看到一个功能完整的UEditor编辑器,那么这一步就成功了。
第三步:配置七牛云并修改DedeCMS上传逻辑
这是整个流程中最核心的一步。
-
获取七牛PHP-SDK
- 访问 七牛云开发者中心 下载 PHP-SDK。
- 下载后,解压,找到
src目录,将其上传到你的网站根目录下,并重命名为qiniu_sdk,路径为/wwwroot/qiniu_sdk/。
-
创建七牛云配置文件
- 在
/qiniu_sdk/目录下,创建一个名为qiniu_config.php的文件。 - 在这个文件中,填入你的七牛云信息:
<?php return [ 'accessKey' => '你的七牛AccessKey', 'secretKey' => '你的七牛SecretKey', 'bucket' => '你的存储空间名称', 'domain' => '你的CDN加速域名', // http://img.yourdomain.com ]; ?> - 在
-
修改DedeCMS的上传处理文件
- 这是整个对接的关键,我们需要修改DedeCMS处理上传的PHP文件,让它调用七牛SDK。
- DedeCMS的上传逻辑通常在
/include/helpers/upload.helper.php文件中,但直接修改这个核心文件不是最佳实践,因为它可能被多处调用。 - 推荐做法:创建一个自定义的上传处理脚本,并修改UEditor的配置,让它调用我们的新脚本。
方法A:修改UEditor的配置文件(推荐)
- 编辑
/ueditor/php/config.json文件。 - 找到
"imageUrlPrefix": ""这一行,将其值设置为你七牛云的域名:"imageUrlPrefix": "http://img.yourdomain.com",
- 找到
"imagePathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}",这个路径是本地的,我们不需要它,但为了UEditor能正常工作,先保留。 - 修改上传处理入口:找到
"imageActionName": "uploadimage",它指向一个处理方法,我们需要创建一个新的PHP文件来处理所有上传请求。
创建新的上传处理文件
/ueditor/php/qiniu_uploader.php<?php // 引入七牛SDK require_once '../qiniu_sdk/autoload.php'; use Qiniu\Auth; use Qiniu\Storage\UploadManager; // 引入DedeCMS的全局定义,以便使用一些函数和常量 define('DEDEADMIN', '..'); require_once DEDEADMIN.'/config.php'; require_once DEDEADMIN.'/include/common.inc.php'; // 获取七牛配置 $qiniuConfig = include '../qiniu_sdk/qiniu_config.php'; // 构建鉴权对象 $auth = new Auth($qiniuConfig['accessKey'], $qiniuConfig['secretKey']); $bucket = $qiniuConfig['bucket']; // 生成上传凭证 $token = $auth->uploadToken($bucket); // 获取上传的文件 $file = $_FILES['upfile']; // 要上传文件的本地路径 $filePath = $file['tmp_name']; // 上传到七牛后保存的文件名,可以自定义 // 使用原文件名,并加上时间戳防止重复 $key = date('YmdHis') . mt_rand(1000, 9999) . '.' . pathinfo($file['name'], PATHINFO_EXTENSION); // 初始化 UploadManager 对象并进行上传 $uploadMgr = new UploadManager(); list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath); // 准备返回给UEditor的数据 $state = 'SUCCESS'; if ($err !== null) { $state = '上传失败: ' . $err->message(); } // 返回JSON格式的数据给UEditor echo json_encode([ "state" => $state, "url" => $qiniuConfig['domain'] . '/' . $ret['key'], // 七牛云文件的完整URL "title" => $file['name'], "original" => $file['name'], ]); ?>- 代码说明:
require_once '../qiniu_sdk/autoload.php';引入七牛SDK的自动加载器。require_once DEDEADMIN.'/config.php';引入DedeCMS的配置,确保在DedeCMS环境中运行。- 文件名
$key的处理方式可以自定义,这里采用“时间戳+随机数”的方式,避免文件名冲突。 - 返回给UEditor的
url必须是七牛云的完整公开URL。
修改UEditor的
config.json- 将
"imageActionName": "uploadimage"的值改为"qiniu_upload"。 - 在
config.json中添加一个新的配置项,指向我们刚创建的qiniu_uploader.php文件:
"imageActionName": "qiniu_upload", // ... 其他配置 ... "qiniuActionUrl": "/ueditor/php/qiniu_uploader.php",
- (可选)同样地,你也可以为文件、视频等上传做类似的配置,修改
"scrawlActionName","snapscreenActionName"等,让它们都指向同一个qiniu_uploader.php文件。
第四步:测试与验证
- 清除缓存:确保浏览器和服务器都清除了缓存。
- 登录后台:进入DedeCMS后台的“添加文章”页面。
- 上传图片:点击UEditor工具栏上的图片上传按钮。
- 选择文件:在弹出的窗口中选择一张本地图片进行上传。
- 观察结果:
- 如果一切顺利,图片会很快上传成功,并直接插入到编辑器中。
- 检查插入到编辑器中的图片链接,它应该不再是本地路径,而是你配置的七牛云CDN域名,
http://img.yourdomain.com/202510271230001234.jpg。 - 登录七牛云后台,在你的存储空间中,应该能看到刚刚上传的这张图片。
- 前台文章页面,刷新后检查图片是否能正常显示。
常见问题与注意事项
- 权限问题:确保
/qiniu_sdk/和/ueditor/php/目录有写入权限(通常为755)。 - PHP版本兼容性:确保你的PHP版本满足七牛SDK的要求(通常是PHP 5.6+)。
- 跨域问题:如果图片在前台页面无法显示,请检查七牛云后台的“内容安全”->“防盗链”设置,确保你的域名没有被封禁,确保你的网站域名已正确配置在七牛的CDN域名列表中。
- 路径问题:在
qiniu_uploader.php中引入DedeCMS文件时,注意 的相对路径是否正确。 - 不修改核心文件:尽量采用创建新脚本的方法,而不是直接修改
upload.helper.php,这样便于后续升级和维护。 - 附件上传:附件上传和图片上传的原理完全一样,你只需要在UEditor的
config.json中找到"catcherActionName"等配置,并将它们也指向你的qiniu_uploader.php即可。
通过以上步骤,你就成功地将DedeCMS、UEditor和七牛云存储三者完美地结合在了一起,实现了高效、稳定、且不占用本地服务器资源的文件上传方案。
