阿里云oss dede

99ANYc3cd6
预计阅读时长 20 分钟
位置: 首页 DEDE建站 正文
  1. 准备工作:在阿里云上创建并配置OSS。
  2. 修改DedeCMS配置:修改DedeCMS的配置文件,使其指向OSS。
  3. 附件处理:配置DedeCMS上传附件、生成缩略图等操作直接存储到OSS。

第一部分:阿里云OSS准备工作

在开始之前,你必须在阿里云控制台完成以下步骤:

阿里云oss dede
(图片来源网络,侵删)
  1. 创建OSS Bucket

    • 登录阿里云OSS控制台
    • 点击“创建Bucket”,填写以下信息:
      • 名称:全局唯一,建议使用与网站域名相关的名称,如 yourdomain-com
      • 地域:选择离你用户最近的地域,如“华东1(杭州)”。
      • 读写权限强烈建议选择“私有”,这样可以防止你的资源被恶意盗用,流量费用由你自己控制。
      • 存储类型:根据需求选择,标准型适合频繁访问的文件,低频访问型适合不常访问的文件。
      • 其他选项保持默认即可。
  2. 创建AccessKey

    • OSS需要你的AccessKey ID和Secret来验证身份。
    • 访问RAM访问控制控制台
    • 在“身份管理” -> “用户”中,创建一个新用户。
    • 创建用户时,勾选“编程访问”,这会为你生成AccessKey IDAccessKey Secret请务必妥善保管Secret,它只显示一次!
  3. 配置Bucket策略(非常重要)

    • 由于我们设置了Bucket为“私有”,所以需要配置策略,让DedeCMS能正常读写文件。
    • 回到OSS控制台,找到你刚刚创建的Bucket,点击“权限管理” -> “权限策略”。
    • 点击“新建权限策略”,切换到“JSON”视图,粘贴以下策略。请将 your-bucket-name 替换为你的Bucket名称。
    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "oss:PutObject",
                    "oss:GetObject",
                    "oss:DeleteObject",
                    "oss:ListObjects"
                ],
                "Resource": [
                    "acs:oss:*:*:your-bucket-name/*"
                ]
            }
        ]
    }
    • 策略说明:
      • Effect: "Allow" 表示允许。
      • Action: 定义了允许的操作,包括上传、下载、删除和列出文件。
      • Resource: 定义了该策略生效的资源范围,这里是你的Bucket下的所有文件。
    • 填写策略名称(如 dedecms-policy),点击“确定”。
    • 创建策略后,回到用户详情页,将这个策略授权给你为DedeCMS创建的那个RAM用户。
  4. 获取域名信息

    阿里云oss dede
    (图片来源网络,侵删)
    • 在Bucket的“域名管理”中,绑定一个自定义域名(推荐)或使用默认的 your-bucket-name.oss-cn-hangzhou.aliyuncs.com 域名。
    • 自定义域名:需要在你自己的域名解析服务商(如阿里云DNSPod等)添加一条CNAME记录,将你的子域名(如 img.yourdomain.com)指向Bucket的默认域名。
    • 后续在DedeCMS中配置时,请使用这个自定义域名或默认域名

第二部分:修改DedeCMS核心配置

这一步是让DedeCMS知道如何与阿里云OSS通信。

  1. 安装或配置OSS SDK

    • 确保你的DedeCMS网站根目录下有 aliyun-oss-php-sdk 文件夹,如果DedeCMS版本较旧,可能需要手动下载并解压到 include/ 目录下。
    • 下载地址:阿里云OSS PHP SDK
  2. 修改配置文件 config_updateenv.php (或 config.inc.php)

    • 这是最核心的一步,找到DedeCMS安装目录下的 data/config.updateenv.php 文件(有些版本可能是 data/config.inc.php,请根据你的实际情况选择)。
    • 在文件中找到或添加以下配置项,并填入你在阿里云获取的信息:
    // ================
    // 阿里云OSS配置
    // ================
    $_cfg['alioss']['enable'] = '1'; // 是否启用OSS,1为启用,0为关闭
    $_cfg['alioss']['KeyID'] = 'LTAI5t6xxxxx'; // 你的 AccessKey ID
    $_cfg['alioss']['KeySecret'] = 'xxxxxxxxxxxxxxxxxxxxxxxx'; // 你的 AccessKey Secret
    $_cfg['alioss']['EndPoint'] = 'oss-cn-hangzhou.aliyuncs.com'; // 你的OSS Endpoint,地域不同则不同
    $_cfg['alioss']['Bucket'] = 'your-bucket-name'; // 你的Bucket名称
    $_cfg['alioss']['AttachUrl'] = 'https://img.yourdomain.com'; // 你的OSS访问域名(自定义域名或默认域名),**注意:这里必须包含协议头(http:// 或 https://)**
  3. 修改 include/helpers/upload.helper.php 文件

    • 这个文件处理附件上传,我们需要修改它,使其在上传附件时直接调用OSS SDK。
    • 找到 MoveUpFile 函数,通常在函数内部,文件上传成功后,会有一个 @unlink($filename); 的代码,表示删除本地临时文件。
    • @unlink($filename); 之前,添加上传到OSS的逻辑。
    • 以下是修改后的 MoveUpFile 函数核心部分示例(具体代码可能因DedeCMS版本而异,请参考官方或社区提供的补丁):
    // 在 MoveUpFile 函数中,找到类似下面的代码块
    if ($mdir)
    {
        $filename = $mdir.'/'.$filename;
    }
    // ... 其他处理代码 ...
    // 文件移动成功后
    if (file_exists($filename))
    {
        // 以下是添加的OSS上传逻辑
        if($GLOBALS['_cfg']['alioss']['enable'] == '1')
        {
            require_once DEDEINC.'/aliyun-oss-php-sdk/autoload.php'; // 引入SDK
            use OSS\OssClient;
            use OSS\Core\OssException;
            try {
                $ossClient = new OssClient($GLOBALS['_cfg']['alioss']['KeyID'], $GLOBALS['_cfg']['alioss']['KeySecret'], $GLOBALS['_cfg']['alioss']['EndPoint']);
                $ossClient->uploadFile($GLOBALS['_cfg']['alioss']['Bucket'], $filename, $filename);
                // 上传成功后,可以选择删除本地文件
                @unlink($filename);
            } catch (OssException $e) {
                // 如果上传失败,记录错误并保留本地文件
                // dede_print($e->getMessage());
            }
        }
        else
        {
            // 如果OSS未启用,执行原逻辑
            @unlink($filename);
        }
    }

    注意:直接修改核心文件在DedeCMS升级后会失效,更推荐的方法是寻找成熟的DedeCMS OSS插件,或者使用DedeCMS的钩子机制(如果版本支持)。


第三部分:处理图片和缩略图

仅仅上传附件还不够,DedeCMS在生成文章内容里的图片和缩略图时,默认路径是本地的,我们需要让这些图片也指向OSS。

  1. 修改 include/helpers/image.helper.php

    • 这个文件处理图片的裁剪、缩放等操作,我们需要修改其输出路径,使其将生成的缩略图也存放到OSS。
    • 找到处理缩略图生成的函数(如 WaterImgResizeImage),修改其保存路径的逻辑,使其与附件上传逻辑类似,调用OSS SDK上传图片。
    • 这个修改比附件上传更复杂,因为它涉及到图片处理后的即时上传。
  2. 使用“远程附件”和“图片远程地址”功能

    • 这是DedeCMS内置的一个相对简单的解决方案,但不够完美。
    • 后台 -> 系统 -> 系统基本参数 -> 核心设置
      • (开启远程附件):设置为“是”。
      • (附件远程保存开关):设置为“是”。
      • (附件目录保存方式):选择“按月度”。
      • (远程附件根目录):这里可以留空,因为“远程附件”功能本身不直接支持OSS,它需要一个支持FTP/SFTP的远程服务器。所以此方法对OSS不直接适用。
  3. 最佳实践:使用成熟的插件或商业解决方案

    • 由于手动修改核心文件非常繁琐且容易出错,强烈建议你寻找专门为DedeCMS开发的阿里云OSS插件。
    • 在DedeCMS官方论坛、开源中国码市、或者一些DedeCMS资源网站上搜索“DedeCMS 阿里云OSS 插件”。
    • 这些插件通常会做以下工作:
      • 封装好OSS SDK的调用。
      • 修改 upload.helper.phpimage.helper.php
      • 提供一个后台设置界面,让你方便地填写AccessKey等信息。
      • 处理图片、缩略图、远程图片等所有场景。
      • 有些高级插件甚至支持“镜像存储”,即文件同时保留在本地和OSS,或者“CDN加速”等。

总结与注意事项

  1. 私有读写:Bucket设置为“私有”后,所有文件访问都需要签名,DedeCMS的SDK会自动处理签名,所以你无需担心,但直接在浏览器中访问 https://your-bucket.oss-cn-hangzhou.aliyuncs.com/1.jpg 是会返回403 Forbidden的。
  2. 成本:使用OSS会产生费用,包括存储费用和流量费用,请根据你的网站访问量预估成本。
  3. 图片防盗链:如果你使用了自定义域名,可以在阿里云OSS控制台的“防盗链”设置中配置Referer白名单,防止其他网站直接引用你的图片,造成不必要的流量费用。
  4. 升级风险:手动修改核心文件最大的问题是DedeCMS升级后,你的修改会丢失。强烈推荐使用第三方插件,它们通常能更好地兼容升级。
  5. 测试:在配置完成后,务必进行充分测试,发布一篇文章,上传几张图片和附件,检查后台是否能正常管理,前台是否能正常显示,并且检查图片的链接是否指向了你的OSS域名。

希望这份详细的指南能帮助你成功地在DedeCMS中集成阿里云OSS!

-- 展开阅读全文 --
头像
织梦如何调用文章所有图片?
« 上一篇 今天
dede搜索页面是什么?如何定义?
下一篇 » 今天

相关文章

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

目录[+]