第一步:最常见的原因 - 目录权限问题
这是导致上传失败的最首要原因,DedeCMS需要特定的目录拥有写入权限,才能将图片文件保存到服务器上。

解决方案:
-
找到需要设置权限的目录 这些目录通常位于您的网站根目录下,主要包括:
/uploads/:所有上传文件(图片、附件等)的根目录。/uploads/allimg/图片默认保存目录。/uploads/default/:默认图片目录。/data/:系统数据目录,用于缓存、配置等。/special/:专题目录。/html/:生成的静态HTML文件目录。
-
设置目录权限(Linux服务器) 您需要通过FTP/SFTP客户端或服务器的控制台(如宝塔面板、cPanel)来修改这些目录的权限。
- 目录权限:设置为
755,这表示所有者有读写执行权限,组用户和其他用户有读和执行权限。 - 文件权限:目录内的文件(如
.jpg,.php)设置为644,这表示所有者有读写权限,组用户和其他用户只有读权限。
如何操作(以宝塔面板为例):
(图片来源网络,侵删)- 进入文件管理器。
- 找到上述目录,右键点击 -> “权限”。
- 输入数字
755,然后勾选“应用到子目录和文件”,点击“确定”。
如何操作(通过FTP命令,如FileZilla):
- 右键点击目录,选择“文件权限”。
- 在“数字”框中输入
755,勾选“递归”,然后点击“确定”。
- 目录权限:设置为
-
Windows服务器用户
- 右键点击目录 -> “属性” -> “安全”选项卡。
- 确保网站运行的用户(如
IIS_IUSRS或NETWORK SERVICE)拥有“读取和执行”、“列出文件夹内容”、“读取”权限。 - 对于需要上传的目录,额外添加“写入”权限。
第二步:检查PHP上传相关配置
即使目录权限正确,PHP本身对上传文件的大小、类型等也有限制。
解决方案:

-
登录您的服务器,找到
php.ini文件,这个文件的位置可能因服务器环境而异(如/etc/php/7.4/apache2/php.ini或宝塔面板的/www/server/php/74/etc/php.ini)。 -
修改或检查以下关键配置项:
file_uploads = On:确保此项为On,允许文件上传。upload_max_filesize = 8M:这是单个上传文件的最大大小,如果您上传的图片超过这个值,就会失败,请根据您的需求调大,32M或64M。post_max_size = 32M:这是通过POST方法发送数据包的最大大小,这个值必须大于或等于upload_max_filesize,如果upload_max_filesize是8M,post_max_size至少要设为8M,但建议设得更大一些,32M,以容纳表单中的其他数据。memory_limit = 128M:PHP脚本可使用的最大内存,处理大图片时可能会消耗较多内存,确保它足够大。max_execution_time = 30:脚本最长执行时间(秒),如果上传大文件或网络慢,可以适当调大,如300。max_input_time = 60:PHP接收输入数据(如文件上传)的最长超时时间,也可以适当调大。
-
保存
php.ini文件后,重启您的Web服务器(如Apache或Ngin)和PHP-FPM服务,使配置生效。
第三步:检查DedeCMS后台设置
问题出在DedeCMS自身的配置上。
解决方案:
- 登录DedeCMS后台。
- 进入 “系统” -> “系统基本参数” -> “核心设置”。
- 检查以下几项:
站点根目录:确保这里的路径是您网站在服务器上的正确绝对路径,/www/wwwroot/您的域名/,错误会导致找不到上传目录。附件目录:通常默认是uploads,确保这个目录存在且有写入权限(参考第一步)。不支持watermark:如果您的服务器没有安装GD库或ImageMagick,但开启了水印功能,上传也会失败,可以先尝试关闭水印功能测试。
第四步:检查上传目录的.htaccess文件(针对Apache服务器)
在 uploads 目录下,可能存在一个 .htaccess 文件,它可能设置了安全规则,阻止了上传行为。
解决方案:
-
通过FTP/SFTP,进入您网站的
/uploads/目录。 -
查看是否存在
.htaccess文件。 -
如果存在,用文本编辑器打开它,检查是否有类似
Deny from all这样的规则,如果有,这会阻止所有访问,包括上传。 -
一个安全的
.htaccess文件应该只允许访问图片等特定文件,并禁止执行脚本,您可以参考以下内容修改或创建:# 防止上传目录执行脚本 <FilesMatch "\.(php|php3|php4|php5|phtml|pl|py|jsp|asp|sh|cgi)$"> Order deny,allow Deny from all </FilesMatch> # 允许访问的文件类型 <FilesMatch "\.(jpg|jpeg|png|gif|bmp|swf)$"> Order allow,deny Allow from all </FilesMatch>
第五步:检查文件类型和扩展名过滤
DedeCMS有自己允许的文件类型列表,如果尝试上传不支持的类型(如 .webp),就会失败。
解决方案:
- 找到文件过滤配置:这个配置通常在
include/dedecollection.class.php或include/uploadsafe.inc.php等文件中,但最直接的方法是搜索后台代码。 - 在后台搜索:登录后台,在“模板”中搜索“文件扩展名”或“文件类型”相关的关键词,找到可以配置允许上传文件类型的地方。
- 修改允许的扩展名:找到类似
$imtypes = array(...)的代码,将您需要上传的图片扩展名(如'webp')添加到数组中。
第六步:检查PHP环境依赖
某些图片处理功能需要PHP的GD库或ImageMagick。
解决方案:
- 检查GD库是否安装:在DedeCMS后台,进入 “系统” -> “系统基本参数” -> “图片标签设置”,看看是否能正常看到GD库信息。
- 如果没有,您需要在服务器上安装GD库,对于Linux服务器,可以使用命令行安装,
- CentOS/RHEL:
yum install php-gd - Debian/Ubuntu:
apt-get install php-gd
- CentOS/RHEL:
- 安装完成后,重启PHP-FPM和Web服务器。
第七步:检查主题模板和JS错误
如果只是某个页面或某个功能(如文章编辑器)的上传按钮无效,可能是前端JavaScript错误或模板文件被修改过。
解决方案:
- 打开浏览器开发者工具(按F12)。
- 切换到“Console”(控制台)标签,尝试上传图片,看看是否有红色的JavaScript错误信息。
- 检查您使用的编辑器(如ckeditor)相关文件是否完整,或者是否与其他插件冲突,可以尝试切换回默认的编辑器测试。
总结排查流程
请按照这个顺序来操作,可以高效地定位问题:
- 【最优先】:检查
/uploads/等目录的权限是否为755。 - 【第二优先】:检查
php.ini中的upload_max_filesize和post_max_size设置。 - 【后台设置】:检查DedeCMS后台“系统基本参数”里的路径是否正确。
- 【安全规则】:检查
/uploads/.htaccess文件是否阻止了上传。 - 【文件类型】:确认您上传的图片格式是DedeCMS支持的。
- 【环境依赖】:检查PHP的GD库是否正常。
- 【前端问题】:如果是特定页面问题,检查浏览器控制台的JS错误。
按照这个流程,90%以上的上传问题都能得到解决,如果以上步骤都无法解决问题,请提供您的服务器环境(如Linux/Windows, Apache/Nginx)、DedeCMS版本以及具体的错误提示(如后台提示什么,浏览器控制台有什么错误),以便进一步分析。
