第一步:最常见的原因检查(90%的问题出在这里)
目录权限问题 (最最常见)
这是导致上传失败的首要原因,DedeCMS需要拥有对特定目录的写入权限才能保存上传的文件。

(图片来源网络,侵删)
需要设置可写权限的目录:
/uploads/(及其所有子目录,如/uploads/、/uploads/allimg/、/uploads/default/等)/data/(用于缓存和配置文件)/templets/(如果涉及到模板修改缓存)
如何设置权限?
-
Linux/Nginx/Apache 环境:
- 通过 FTP 或 SFTP 工具连接服务器,右键点击上述文件夹,选择“文件权限”或“属性”。
- 将权限值设置为 755 (对于目录) 或 644 (对于文件)。
- 关键一步: 确保
uploads目录及其子目录的所有者是 Web 服务器运行的用户(通常是www-data,nginx,apache或daemon),如果不确定,可以将所有者和组都设置为这个用户。 - 如果你的主机控制面板(如 cPanel, Plesk)有权限管理功能,也可以在那里操作。
-
Windows 环境:
(图片来源网络,侵删)- 右键点击文件夹 -> “属性” -> “安全” -> “编辑” -> “添加”,输入
IUSR(IIS) 或NETWORK SERVICE,然后赋予“修改”或“完全控制”权限。
- 右键点击文件夹 -> “属性” -> “安全” -> “编辑” -> “添加”,输入
PHP 上传限制问题
PHP 本身对上传文件的大小和类型有限制,即使你的 DedeCMS 后台设置得再大也没用。
需要检查和修改的 PHP 配置项 (在 php.ini 文件中):
file_uploads = On:确保此项为On。upload_max_filesize:单个文件上传的最大大小。upload_max_filesize = 10M。post_max_size:POST 数据的最大大小。这个值必须大于或等于upload_max_filesize。post_max_size = 20M。max_execution_time:脚本最大执行时间(秒),上传大文件时可能需要增加此值,max_execution_time = 300(5分钟)。max_input_time:脚本接收输入数据的最长时间(秒),同样建议设置得大一些。
如何修改 php.ini?
- 对于虚拟主机/云服务器: 通常在主机控制面板的“PHP 设置”或“配置文件编辑器”中可以修改,无需手动上传文件。
- 对于自己部署的服务器: 找到
php.ini文件(通常在/etc/php/7.x/apache2/或/usr/local/etc/php/目录下),修改后需要重启 Apache 或 Nginx 服务才能生效。
第二步:DedeCMS 后台设置检查
后台上传参数设置
登录 DedeCMS 后台,检查上传相关的配置是否正确。

(图片来源网络,侵删)
- 路径:
系统->系统基本参数->附件设置 - 检查项:
上传目录设置:确认上传目录的路径是正确的,通常是/uploads/。不允许上传的文件类型:检查你尝试上传的图片后缀(如.jpg,.png,.gif)是否被写入了黑名单。允许上传的文件类型:确认你的图片类型在白名单中。附件保存形式:检查是按年月目录还是按目录,确保目录存在且有权限。
服务器安全软件拦截
服务器上安装的安全软件(如 安全狗、云锁、360网站卫士 等)可能会误判图片上传为攻击行为,从而拦截。
排查方法:
- 暂时关闭或放行这些安全软件的拦截规则,然后尝试上传,如果成功,说明就是安全软件的问题。
- 查看安全软件的日志,找到被拦截的规则,然后添加“信任”或“放行”规则,允许对
uploads目录下的文件进行写入操作。
第三步:服务器环境和浏览器检查
服务器磁盘空间
检查服务器的硬盘是否已满。/uploads 目录所在的分区空间不足,自然无法保存新文件,可以通过 SSH 或 FTP 连接服务器,使用 df -h (Linux) 或在资源管理器中查看 (Windows) 来确认。
浏览器问题
- 清除缓存和 Cookie:浏览器缓存有时会干扰页面脚本的正常执行。
- 尝试不同浏览器:用 Chrome、Firefox、Edge 等不同浏览器登录后台尝试上传,以排除是特定浏览器的问题。
- 按 F12 开发者工具:在“网络”(Network) 标签页中观察上传请求,查看是否有具体的错误信息返回(如 404, 500, 403 等),这能提供更精确的线索。
服务器配置问题
- Nginx 配置: Nginx 默认不处理
POST请求中的大文件上传,需要在nginx.conf的server块中添加或修改以下配置:client_max_body_size 20M; // 设置最大上传文件大小
修改后需要重启 Nginx。
- PHP-FPM 配置: 如果使用 PHP-FPM,有时也需要在
www.conf配置文件中调整request_terminate_timeout等参数。
第四步:DedeCMS 程序本身问题
程序文件损坏
如果以上都排除了,可能是 DedeCMS 的上传相关文件在更新或迁移过程中损坏了。
解决方法:
- 重新上传核心文件: 从 DedeCMS 官网下载与你当前版本完全一致的安装包,解压后,用 FTP 工具覆盖以下核心文件(注意:覆盖前最好备份原文件):
/dede/file_control.php/dede/media_add.php/dede/swfupload.php/include/dialog/select_images.php等所有与上传相关的文件。
插件或模板冲突
安装的某个插件或自定义的模板文件可能修改了上传相关的逻辑,导致冲突。
排查方法:
- 禁用插件:暂时禁用所有非必要的插件,然后尝试上传。
- 切换默认模板:暂时切换到系统默认的模板,看看是否是模板文件的问题。
总结与排查流程建议
为了高效解决问题,请按以下顺序操作:
- 首要检查:
uploads目录权限是否为 755,且所有者是 Web 用户。 - 其次检查:
php.ini中的upload_max_filesize和post_max_size是否足够大。 - 后台检查:
系统基本参数->附件设置里的黑白名单和路径是否正确。 - 安全软件:检查安全狗、云锁等是否拦截了上传行为。
- 服务器资源:确认服务器磁盘空间未满。
- 浏览器环境:换个浏览器或清除缓存重试。
- 深度排查:检查 Nginx/PHP-FPM 配置,最后考虑重新覆盖核心文件。
按照这个流程,绝大多数 DedeCMS 图片上传失败的问题都能迎刃而解,祝你成功!
