使用 DedeCMS 自带的“软件模型”(最推荐、最规范)
这是 DedeCMS 内置的、最标准的方法,专门用于发布和管理软件、文档等需要下载的资源,它自带了下载次数统计和本地文件下载功能。

操作步骤:
创建“软件”栏目
你需要一个专门用来存放下载文件的栏目。
- 登录 DedeCMS 后台。
- 进入「栏目管理」->「添加栏目」。
- 栏目名称:填写,软件下载”。
- 栏目类型:选择“频道栏目”。
- 模型:这是最关键的一步,选择“软件”。
- 填写其他信息(如栏目目录、简介等),确定”。
发布软件文章
你可以在刚创建的“软件下载”栏目下发布文章了。

-
进入「发布文章」->「添加文章」。
-
选择你刚才创建的“软件下载”栏目。
-
:填写你的文件名称。
-
软件大小:填写文件大小,
5 MB。 -
软件等级:选择一个星级。
-
官方网址:如果需要,可以填写。
-
下载权限:设置用户下载此文件需要达到的积分或等级。
-
本地地址:这是核心! 点击“选择本地文件”按钮,在弹出的窗口中选择你上传到
uploads目录下的文件。注意:DedeCMS 的“软件模型”默认只支持下载
uploads目录下的文件,如果你想把文件放在其他地方,需要修改代码,但这不推荐。 -
软件简介:填写文件的详细说明,这相当于文章正文。
-
点击“保存”按钮。
前台调用
在前台模板(通常是 article_artile.htm)中,DedeCMS 会自动识别“软件模型”的字段,并生成下载链接。
你只需要在模板中调用 {dede:field name='softsize'/} 和 {dede:field name='softurl'/} 即可。
示例代码 (article_artile.htm):
<h1>{dede:field.title/}</h1>
<div class="info">
文件大小:{dede:field.softsize/} |
下载权限:{dede:field.score/} 积分
</div>
<div class="content">
{dede:field.body/}
</div>
<div class="download">
<h3>下载地址</h3>
<a href="{dede:field.softurl/}" target="_blank">点击下载 {dede:field.title/}</a>
</div>
优点:
- 功能完善:自带下载次数统计、权限控制、文件大小显示。
- 规范安全:符合 DedeCMS 的数据结构,不易出错。
- 操作简单:图形化界面,无需代码。
缺点:
- 路径限制:默认只能下载
uploads目录下的文件。
直接使用文章正文中的链接(最简单、最灵活)
如果你只是想提供一个简单的下载链接,不关心下载次数统计,或者文件不在 uploads 目录下,这个方法最快。
操作步骤:
- 上传文件:通过 FTP 或 DedeCMS 后台的“文件管理器”,将你的下载文件(如
document.zip)上传到网站的任意目录,/downloads/。 - 发布文章:正常发布一篇文章。
- 插入链接:在文章编辑器中,选中要作为下载的文字,然后点击“插入链接”按钮,链接地址填写你的文件完整路径,
http://www.yoursite.com/downloads/document.zip。 - 保存文章。
优点:
- 极其简单:几秒钟就能搞定。
- 无限制:可以下载网站任何位置的文件,甚至是外部链接。
- 不依赖模型:不需要创建特殊的“软件”栏目。
缺点:
- 无统计功能:无法记录下载次数。
- 暴露真实路径:直接使用文件路径,容易被搜索引擎抓取或盗链,安全性较低。
- 无法设置权限:所有用户都可以下载,无法与积分等会员系统挂钩。
自定义下载页面(最安全、功能最强)
如果你需要更强的安全控制(如防止盗链、强制登录)、更美观的下载页面,或者需要下载非 uploads 目录的文件,可以创建一个自定义的下载处理页面。
操作步骤:
创建下载处理文件
在网站根目录下创建一个新文件,down.php。
down.php 代码示例:
<?php
/**
* 自定义文件下载处理页面
* 使用方法:在文章中链接到 down.php?id=文章ID&f=文件名
*/
require_once (dirname(__FILE__) . "/include/common.inc.php"); // 引入DedeCMS核心文件
// 1. 获取参数
$file_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
$file_name = isset($_GET['f']) ? trim($_GET['f']) : '';
if (empty($file_id) || empty($file_name)) {
echo '参数错误!';
exit;
}
// 2. 从数据库获取文章信息(这里以获取文章为例,你也可以获取其他附加表信息)
$row = $dsql->GetOne("SELECT title, body FROM `#@__archives` WHERE id = {$file_id}");
if (!is_array($row)) {
echo '文件不存在或已被删除!';
exit;
}
// 3. 安全处理:检查文件名是否在文章正文中存在,防止下载任意文件
// 这是一个简单的检查,更严格的检查需要根据你的业务逻辑来
if (strpos($row['body'], $file_name) === false) {
echo '非法下载请求!';
exit;
}
// 4. 设置文件真实路径(这里假设文件放在 /downloads/ 目录下)
// 为了安全,不要直接使用用户传来的文件名,最好结合数据库里的信息
$download_path = '/downloads/' . $file_name; // !!! 重要:请确保这个路径是安全的
// 5. 检查文件是否存在
if (!file_exists($download_path)) {
echo '文件不存在,请检查路径!';
exit;
}
// 6. 设置下载头信息,强制下载
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($file_name) . '"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($download_path));
// 7. 输出文件内容
readfile($download_path);
exit;
?>
在文章中使用链接
中,不要直接使用文件链接,而是使用指向 down.php 的链接。
你的文件是 report.pdf,文章ID是 100,那么链接就写成:
<a href="/down.php?id=100&f=report.pdf" target="_blank">点击下载报告</a>
优点:
- 安全性高:可以隐藏真实文件路径,防止盗链。
- 功能强大:可以轻松集成登录验证、积分扣除、权限判断等逻辑。
- 灵活性高:可以下载任何目录下的文件。
缺点:
- 需要编程:需要一定的 PHP 基础。
- 配置稍复杂:需要自己编写和维护代码。
总结与推荐
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 软件模型 | 功能完善、规范、简单 | 路径受限 | 官方推荐的软件/文档下载,需要统计下载量 |
| 直接链接 | 最简单、最灵活 | 无统计、不安全、无权限 | 临时、简单的文件分享,不关心下载量 |
| 自定义页面 | 最安全、功能最强 | 需要编程、配置复杂 | 对安全性和权限有高要求的商业应用 |
给你的建议:
- 如果你是新手,或者只是发布一些普通的文档:强烈推荐使用方法一(软件模型),这是 DedeCMS 的标准用法,能解决 80% 的下载需求。
- 如果你只是想快速分享一个文件,不想做任何设置:使用方法二,直接在文章里加链接。
- 如果你正在开发一个商业网站,需要防盗链、会员权限等功能:投入时间学习并使用方法三,这是最专业和安全的做法。
