ueditor七牛dede如何实现上传存储?

99ANYc3cd6
预计阅读时长 23 分钟
位置: 首页 DEDE建站 正文

核心思路

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

ueditor 七牛 dede
(图片来源网络,侵删)
  1. 用户操作:在DedeCMS后台使用UEditor编辑器编辑文章。
  2. 文件上传:点击UEditor的图片、附件上传按钮,文件被发送到DedeCMS的一个专门处理上传的PHP脚本。
  3. 脚本处理:这个DedeCMS的上传脚本,不再将文件保存到本地服务器,而是调用七牛云的PHP-SDK
  4. 七牛上传:通过SDK将文件直接上传到七牛云的存储空间。
  5. 返回结果:上传成功后,七牛云会返回一个文件的公开URL地址。
  6. UEditor显示:DedeCMS的脚本将这个URL地址返回给UEditor,UEditor将其插入到编辑器内容中,完成整个上传流程。

第一步:准备工作

在开始之前,请确保你已经准备好以下几样东西:

  1. 一个已安装的DedeCMS网站:确保你的网站可以正常运行。
  2. 一个七牛云账号:如果没有,请先注册并实名认证。
  3. 一个已创建的七牛云存储空间:记录下这个空间的名称
  4. 七牛云的 AccessKey 和 SecretKey:在七牛云后台的“个人中心” -> “密钥管理”中获取。
  5. 一个已备案并绑定的域名:用于配置七牛云的CDN加速域名,这是至关重要的一步,因为最终图片的URL将使用这个域名。
  6. UEditor编辑器源码:从百度UEditor官网下载最新版的PHP版本。

第二步:安装并配置UEditor到DedeCMS

  1. 下载UEditor

    • 访问 UEditor官网 下载 PHP 版本。
    • 下载后,你会得到一个压缩包,解压后你会看到 phputf8-phpassets 等文件夹。
  2. 上传UEditor文件

    • 将解压后的文件夹(通常是 utf8-php 版本)通过FTP上传到你的DedeCMS网站根目录下,并重命名为 ueditor,你的网站根目录是 /wwwroot/,那么路径就是 /wwwroot/ueditor/
  3. 修改DedeCMS模板文件

    ueditor 七牛 dede
    (图片来源网络,侵删)
    • 登录你的DedeCMS后台,找到 dede/templets/ 目录。
    • 找到 article_add.htm (添加文章) 和 article_edit.htm (编辑文章) 这两个文件。
    • 备份这两个文件,以防操作失误。
    • 在这两个文件中,找到原来的文本域 <textarea>,它的 id 通常是 bodycontent
    • 用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>
    • 注意
      • 确保 hrefsrc 的路径指向你上传的 ueditor 文件夹。
      • <script type="text/plain" id="myEditor">...</script> 这部分是UEditor的容器,id 必须与 UE.getEditor() 中的参数一致。name="body" 是关键,它确保了提交表单时,编辑器的内容能正确提交给DedeCMS的 body 字段。
  4. 验证UEditor安装

    • 清除浏览器缓存,重新进入DedeCMS后台的“添加文章”页面。
    • 如果能看到一个功能完整的UEditor编辑器,那么这一步就成功了。

第三步:配置七牛云并修改DedeCMS上传逻辑

这是整个流程中最核心的一步。

  1. 获取七牛PHP-SDK

    • 访问 七牛云开发者中心 下载 PHP-SDK。
    • 下载后,解压,找到 src 目录,将其上传到你的网站根目录下,并重命名为 qiniu_sdk,路径为 /wwwroot/qiniu_sdk/
  2. 创建七牛云配置文件

    • /qiniu_sdk/ 目录下,创建一个名为 qiniu_config.php 的文件。
    • 在这个文件中,填入你的七牛云信息:
    <?php
    return [
        'accessKey' => '你的七牛AccessKey',
        'secretKey' => '你的七牛SecretKey',
        'bucket'    => '你的存储空间名称',
        'domain'    => '你的CDN加速域名', //  http://img.yourdomain.com
    ];
    ?>
  3. 修改DedeCMS的上传处理文件

    • 这是整个对接的关键,我们需要修改DedeCMS处理上传的PHP文件,让它调用七牛SDK。
    • DedeCMS的上传逻辑通常在 /include/helpers/upload.helper.php 文件中,但直接修改这个核心文件不是最佳实践,因为它可能被多处调用。
    • 推荐做法:创建一个自定义的上传处理脚本,并修改UEditor的配置,让它调用我们的新脚本。

    方法A:修改UEditor的配置文件(推荐)

    1. 编辑 /ueditor/php/config.json 文件。
    2. 找到 "imageUrlPrefix": "" 这一行,将其值设置为你七牛云的域名:
      "imageUrlPrefix": "http://img.yourdomain.com",
    3. 找到 "imagePathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}",这个路径是本地的,我们不需要它,但为了UEditor能正常工作,先保留。
    4. 修改上传处理入口:找到 "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

    1. "imageActionName": "uploadimage" 的值改为 "qiniu_upload"
    2. config.json 中添加一个新的配置项,指向我们刚创建的 qiniu_uploader.php 文件:
    "imageActionName": "qiniu_upload",
    // ... 其他配置 ...
    "qiniuActionUrl": "/ueditor/php/qiniu_uploader.php",
    1. (可选)同样地,你也可以为文件、视频等上传做类似的配置,修改 "scrawlActionName", "snapscreenActionName" 等,让它们都指向同一个 qiniu_uploader.php 文件。

第四步:测试与验证

  1. 清除缓存:确保浏览器和服务器都清除了缓存。
  2. 登录后台:进入DedeCMS后台的“添加文章”页面。
  3. 上传图片:点击UEditor工具栏上的图片上传按钮。
  4. 选择文件:在弹出的窗口中选择一张本地图片进行上传。
  5. 观察结果
    • 如果一切顺利,图片会很快上传成功,并直接插入到编辑器中。
    • 检查插入到编辑器中的图片链接,它应该不再是本地路径,而是你配置的七牛云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和七牛云存储三者完美地结合在了一起,实现了高效、稳定、且不占用本地服务器资源的文件上传方案。

-- 展开阅读全文 --
头像
dede channel 自增
« 上一篇 01-06
织梦二级域名如何绑定tag标签?
下一篇 » 01-06

相关文章

取消
微信二维码
支付宝二维码

目录[+]