这个功能主要在 “采集” 和 维护” 两个场景下非常有用,它可以将文章中引用的外部资源自动保存到你的服务器上,这样做有以下好处:

(图片来源网络,侵删)
- 加速网站访问:用户访问你的网站时,所有资源都从你的服务器加载,避免了跨域请求,速度更快、更稳定。
- 防止外链失效:如果其他网站的图片或资源被删除或移动,你网站上的内容就会变成空白(俗称“图裂”),下载到本地可以永久保存这些资源。
- 降低被屏蔽风险:过度依赖外部资源可能会导致你的 IP 被对方网站封禁。
- 数据完整性:网站的所有资源都归自己所有,便于管理和迁移。
核心原理
DedeCMS 的这个功能是通过 “远程文件本地化” 处理流程实现的,当你执行保存文章、更新文章或采集内容时,系统会自动扫描文章内容(HTML 代码),找到 src(图片)、href(CSS/JS)、@font-face 中的 url()(字体文件)等标签,然后根据配置,将远程文件下载到你指定的本地目录,并替换 HTML 代码中的链接为本地路径。
配置方法
这个功能的核心配置位于 DedeCMS 后台的 “系统” -> “系统基本参数” 中。
第一步:开启并配置基本参数
- 登录 DedeCMS 后台。
- 进入 “系统” -> “系统基本参数”。
- 在左侧菜单中选择 “核心设置”。
你需要关注以下几个关键参数:
| 参数名称 | 参数说明 | 推荐配置 |
|---|---|---|
| 远程站点目录 | 用于存放下载下来的远程图片和资源的根目录,通常设置为 /uploads/ 下的一个子目录,/uploads/allimg/。 |
/uploads/allimg/ |
| 远程文件是否包含目录名 | 决定下载的文件是否按原网站的目录结构存放。 | 否 (推荐),选择“否”会将所有文件都放在上面设置的“远程站点目录”下,文件名会自动重命名以避免冲突,选择“是”则会尝试保持原目录结构,可能导致目录层级过深。 |
| 远程文件保存规则 | 定义下载到本地后的文件命名规则。 | {random}{rand:6},这是一个安全的规则,{random} 会生成一个随机数,{rand:6} 会生成一个6位随机数,组合起来可以有效避免文件名冲突。 |
| 远程图片是否调用本地程序 | (重要) 这个选项决定是否使用 DedeCMS 内置的 image.php 来处理图片。 |
是 (推荐),开启后,所有图片的链接都会变成 /uploads/allimg/xxx.jpg 的形式,直接指向文件,关闭后,链接可能会变成 /plus/diy.php?action=img&img=xxx.jpg,这种方式会多一次 PHP 脚本解析,效率稍低,对于普通网站,建议开启。 |
配置完成后,务必点击“保存”按钮。

(图片来源网络,侵删)
第二步:在内容模型中启用(可选但推荐)
为了确保发布新文章或编辑旧文章时都能自动执行这个功能,最好在你使用的内容模型中也进行设置。
- 进入 “核心” -> “内容模型管理”。
- 点击你正在使用的内容模型(文章模型”)后面的 “字段管理”。
- 在字段列表中,找到 “body” 字段(通常是存放文章正文内容的字段)。
- 点击 “设置” 或 “管理”。
- 在 body 字段的设置页面,找到 “远程图片保存” 相关的选项,确保它们是启用的状态,通常这里的设置会覆盖全局设置,但一般保持默认即可,因为我们在第一步已经全局配置好了。
如何使用
配置完成后,这个功能会在以下几种情况下自动触发:
发布新文章(手动发布)
这是最直接的使用方式。
- 在后台 ” 或 ” 时,将文章内容粘贴到编辑器中,中如果包含
<img src="http://other-site.com/image.jpg">这样的外部链接。 - 点击 “保存” 或 “发布” 按钮。
- 在保存过程中,DedeCMS 会自动扫描正文,将
http://other-site.com/image.jpg下载到/uploads/allimg/目录下,并将其重命名(a1b2c3.jpg)。 - 保存成功后,文章中的 HTML 代码会自动更新为:
<img src="/uploads/allimg/a1b2c3.jpg">。
批量更新文章(处理已有内容)
如果你网站中有很多旧文章包含外链图片,可以使用这个功能进行批量处理。
- 进入 ” -> “批量维护” -> “数据库内容替换”。
- 操作目标:选择你想要处理的栏目,或者选择“所有栏目”。
- :在“替换内容”文本框中输入
src="http://(注意:这里输入的是你要查找的远程链接的开头部分)。 - :这个字段可以留空,因为我们不需要在这里做文本替换,这个功能是用来触发“远程文件本地化”处理流程的。
- 重要提示:这个工具主要用于文本替换,要让它处理远程图片,你需要先通过其他方式(如采集)让系统识别出这些外链,然后再运行更新,一个更简单的方法是:
- 进入 “采集” -> “采集管理”。
- 新建一个采集任务,或者选择一个已有的任务。
- 在任务的最后一步,有一个 “远程文件本地化” 的选项,务必勾选它。
- 然后你可以运行这个采集任务,即使不采集任何新内容,它也会扫描指定栏目下文章的正文,并执行远程图片下载,这是批量处理旧文章外链最有效的方法。
使用采集功能
这是该功能最强大的应用场景。
- 在设置采集规则时,特别是“文章保存”这一步。
- 你会看到一个明确的选项:“远程文件本地化”,并且下面有复选框让你选择是否下载远程图片、远程Flash、远程媒体、远程附件等。
- 务必勾选你需要的选项(通常至少要勾选“远程图片”)。
- 设置好“远程站点目录”和“保存规则”(如果这里没有,则使用全局设置)。
- 当你采集并保存文章时,DedeCMS 会自动将采集到的文章中的所有外部资源下载到本地。
常见问题与注意事项
-
权限问题
- 确保 DedeCMS 程序对
/uploads/目录及其子目录有写入权限,通常需要将目录的权限设置为755或777(777有安全风险,不推荐生产环境使用,755足够)。 - 确保 DedeCMS 运行用户(如
www-data,nginx,apache)对该目录有写入权限。
- 确保 DedeCMS 程序对
-
服务器资源限制
- 下载远程图片会消耗服务器的带宽和 I/O 资源,如果你的网站要处理大量文章或采集大量数据,可能会导致服务器负载过高。
- PHP 默认的
max_execution_time(脚本执行时间)和memory_limit(内存限制)可能会影响大文件的下载,如果遇到超时错误,可能需要调整php.ini中的这些值。
-
防盗链问题
- 有些网站会检查
Referer头信息,如果发现请求不是来自他们自己的网站,就会拒绝提供文件,DedeCMS 默认的请求头可能无法绕过防盗链,对于这种情况,该功能可能无法成功下载图片。
- 有些网站会检查
-
HTTPS 与 HTTP 混合内容
如果你的网站启用了 HTTPS,但文章中的图片链接是 HTTP,现代浏览器会阻止加载这些不安全的资源,导致图片无法显示,DedeCMS 的下载功能可以解决这个问题,它会将 HTTP 图片下载到本地,然后通过 HTTPS 链接访问,避免了混合内容警告。
-
文件命名冲突
- 使用
{random}{rand:6}这样的随机命名规则可以有效避免文件名冲突,如果使用固定规则(如按时间),在短时间内处理大量内容时可能会产生重名文件,导致旧文件被覆盖。
- 使用
-
相对路径问题
- DedeCMS 下载的图片路径通常是相对于网站根目录的绝对路径(如
/uploads/allimg/xxx.jpg),确保你的网站配置正确,能够正确解析这种路径。
- DedeCMS 下载的图片路径通常是相对于网站根目录的绝对路径(如
| 功能场景 | 操作步骤 | 关键点 |
|---|---|---|
| 手动发布/编辑文章 | 配置全局参数。 在编辑器中粘贴包含外链的内容。 点击“保存”。 |
确保权限正确,勾选了“远程图片调用本地程序”。 |
| 批量处理旧文章 | 配置全局参数。 进入“采集管理”。 选择一个任务,勾选“远程文件本地化”。 运行该任务扫描指定栏目。 |
这是最有效的批量处理方法。 |
| 配置全局参数。 在采集任务的“文章保存”步骤,勾选“远程文件本地化”及相关资源类型。 |
采集功能是此设计的主要用途。 |
通过以上配置和使用方法,你就可以轻松地让 DedeCMS 自动管理远程资源,提升网站的稳定性和性能。
