- 准备工作:在阿里云上创建并配置OSS。
- 修改DedeCMS配置:修改DedeCMS的配置文件,使其指向OSS。
- 附件处理:配置DedeCMS上传附件、生成缩略图等操作直接存储到OSS。
第一部分:阿里云OSS准备工作
在开始之前,你必须在阿里云控制台完成以下步骤:

(图片来源网络,侵删)
-
创建OSS Bucket:
- 登录阿里云OSS控制台。
- 点击“创建Bucket”,填写以下信息:
- 名称:全局唯一,建议使用与网站域名相关的名称,如
yourdomain-com。 - 地域:选择离你用户最近的地域,如“华东1(杭州)”。
- 读写权限:强烈建议选择“私有”,这样可以防止你的资源被恶意盗用,流量费用由你自己控制。
- 存储类型:根据需求选择,标准型适合频繁访问的文件,低频访问型适合不常访问的文件。
- 其他选项保持默认即可。
- 名称:全局唯一,建议使用与网站域名相关的名称,如
-
创建AccessKey:
- OSS需要你的AccessKey ID和Secret来验证身份。
- 访问RAM访问控制控制台。
- 在“身份管理” -> “用户”中,创建一个新用户。
- 创建用户时,勾选“编程访问”,这会为你生成
AccessKey ID和AccessKey Secret。请务必妥善保管Secret,它只显示一次!
-
配置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用户。
-
获取域名信息:
(图片来源网络,侵删)- 在Bucket的“域名管理”中,绑定一个自定义域名(推荐)或使用默认的
your-bucket-name.oss-cn-hangzhou.aliyuncs.com域名。 - 自定义域名:需要在你自己的域名解析服务商(如阿里云DNSPod等)添加一条CNAME记录,将你的子域名(如
img.yourdomain.com)指向Bucket的默认域名。 - 后续在DedeCMS中配置时,请使用这个自定义域名或默认域名。
- 在Bucket的“域名管理”中,绑定一个自定义域名(推荐)或使用默认的
第二部分:修改DedeCMS核心配置
这一步是让DedeCMS知道如何与阿里云OSS通信。
-
安装或配置OSS SDK:
- 确保你的DedeCMS网站根目录下有
aliyun-oss-php-sdk文件夹,如果DedeCMS版本较旧,可能需要手动下载并解压到include/目录下。 - 下载地址:阿里云OSS PHP SDK
- 确保你的DedeCMS网站根目录下有
-
修改配置文件
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://)**
- 这是最核心的一步,找到DedeCMS安装目录下的
-
修改
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。
-
修改
include/helpers/image.helper.php:- 这个文件处理图片的裁剪、缩放等操作,我们需要修改其输出路径,使其将生成的缩略图也存放到OSS。
- 找到处理缩略图生成的函数(如
WaterImg或ResizeImage),修改其保存路径的逻辑,使其与附件上传逻辑类似,调用OSS SDK上传图片。 - 这个修改比附件上传更复杂,因为它涉及到图片处理后的即时上传。
-
使用“远程附件”和“图片远程地址”功能:
- 这是DedeCMS内置的一个相对简单的解决方案,但不够完美。
- 后台 -> 系统 -> 系统基本参数 -> 核心设置:
- (开启远程附件):设置为“是”。
- (附件远程保存开关):设置为“是”。
- (附件目录保存方式):选择“按月度”。
- (远程附件根目录):这里可以留空,因为“远程附件”功能本身不直接支持OSS,它需要一个支持FTP/SFTP的远程服务器。所以此方法对OSS不直接适用。
-
最佳实践:使用成熟的插件或商业解决方案:
- 由于手动修改核心文件非常繁琐且容易出错,强烈建议你寻找专门为DedeCMS开发的阿里云OSS插件。
- 在DedeCMS官方论坛、开源中国码市、或者一些DedeCMS资源网站上搜索“DedeCMS 阿里云OSS 插件”。
- 这些插件通常会做以下工作:
- 封装好OSS SDK的调用。
- 修改
upload.helper.php和image.helper.php。 - 提供一个后台设置界面,让你方便地填写AccessKey等信息。
- 处理图片、缩略图、远程图片等所有场景。
- 有些高级插件甚至支持“镜像存储”,即文件同时保留在本地和OSS,或者“CDN加速”等。
总结与注意事项
- 私有读写:Bucket设置为“私有”后,所有文件访问都需要签名,DedeCMS的SDK会自动处理签名,所以你无需担心,但直接在浏览器中访问
https://your-bucket.oss-cn-hangzhou.aliyuncs.com/1.jpg是会返回403 Forbidden的。 - 成本:使用OSS会产生费用,包括存储费用和流量费用,请根据你的网站访问量预估成本。
- 图片防盗链:如果你使用了自定义域名,可以在阿里云OSS控制台的“防盗链”设置中配置Referer白名单,防止其他网站直接引用你的图片,造成不必要的流量费用。
- 升级风险:手动修改核心文件最大的问题是DedeCMS升级后,你的修改会丢失。强烈推荐使用第三方插件,它们通常能更好地兼容升级。
- 测试:在配置完成后,务必进行充分测试,发布一篇文章,上传几张图片和附件,检查后台是否能正常管理,前台是否能正常显示,并且检查图片的链接是否指向了你的OSS域名。
希望这份详细的指南能帮助你成功地在DedeCMS中集成阿里云OSS!
