织梦发布文章找不到上传图片按钮

问题现象描述

不少织梦CMS(DedeCMS)站长在升级 PHP 版本或迁移服务器后,进入后台「发布文章」页面时,会发现原本在编辑器工具栏上的「上传图片」按钮突然消失,仅能看到「插入图片」的链接输入框。这会导致编辑稿件时无法直接将本地图片上传到服务器,严重影响日常更新效率。

原因分析

1. 编辑器切换为ckeditor且未配置上传入口

织梦 V5.7 SP2 之后默认采用 ckeditor,但部分老模板仍引用旧的 FCKeditor 配置。当 include/ckeditor/ 目录下的 config.jsdedeckeditor.php 缺失 filebrowserUploadUrl 参数时,上传按钮就不会渲染。

2. 上传目录权限不足

如果 uploads/allimg/uploads/litimg/ 等目录没有写入权限(一般要求 755 或 777),织梦会在初始化时把上传功能隐藏,避免页面报错。

3. 后台安全设置关闭了附件上传

「系统 - 系统基本参数 - 附件设置」中如果将「是否开启附件上传」关闭,或者限制了「管理员组」上传权限,编辑器就不会显示上传按钮。

4. JS 被浏览器缓存或 CDN 拦截

升级后未清理浏览器缓存,或服务器开启了 WAF 拦截 upload.php 请求,也会让按钮在前端无法生成。

解决步骤

步骤一:检查编辑器配置文件

打开 include/ckeditor/config.js,确保包含以下配置项:

CKEDITOR.editorConfig=function(config){
    config.filebrowserUploadUrl='/plus/imgUpload.php';
    config.filebrowserImageUploadUrl='/plus/imgUpload.php';
    config.filebrowserFlashUploadUrl='/plus/flashUpload.php';
    config.allowedContent=true;
};

步骤二:确认上传目录可写

在服务器终端或宝塔面板中,给以下目录赋予写入权限:

uploads/allimg
uploads/litimg
uploads/userup
uploads/soft

权限建议设置为 755,所有者与 Web 运行账号(www 或 nginx)保持一致。

步骤三:开启后台附件上传开关

进入「系统 → 系统基本参数 → 附件设置」,将以下选项设置为「是」:

  • 是否允许上传附件:是
  • 图片上传最大尺寸:根据服务器配置填写,建议 2MB
  • 允许的图片类型:jpg|png|gif|jpeg|webp

步骤四:检查会员组与管理员权限

「系统 → 用户组管理 → 管理员组」中,勾选「上传附件」与「发布文章」权限,保存后重新登录后台。

步骤五:清理缓存并强制刷新

进入「系统 → 系统维护 → 更新系统缓存」,然后按 Ctrl+F5 强制刷新浏览器。如果使用 CDN,记得刷新全站缓存。

配置示例

如果希望走织梦官方默认的 dialog/select_images.php 上传通道,可以在模板 article_add.htm 中调用:

<input type="button" value="上传图片"
   onclick="javascript:OpenDialog('/dialog/select_images.php?imgstick=small&comeback=picname');">

注意事项

  • 升级 PHP 到 8.x 后,imgUpload.php 中部分 ereg() 函数已废弃,需要替换为 preg_match()
  • 若使用宝塔 Nginx,需在「网站 - 配置文件」中放开 uploads 目录的 location 限制。
  • 禁止把 uploads 目录设为 777 长期开放,存在被上传 webshell 的风险。
  • 建议开启「水印设置」并对上传文件统一改名,避免中文文件名导致乱码。
操作完成后,建议先用普通管理员账号测试上传流程,再交给编辑使用,确保权限链路畅通。

后续优化建议

遇到上传按钮丢失不要急着换编辑器,九成是配置与权限问题。建议在升级或迁移前备份 include/ckeditoruploads 目录,迁移后第一时间核对目录权限与 JS 路径。长期来看,可以接入 OSS 或七牛云对象存储,让织梦只负责记录 URL,把上传压力外移,既安全又稳定。立即动手按上述步骤排查一遍,多数情况下十分钟内即可恢复按钮。