- 后台编辑器(如:百度编辑器UEditor)的图片上传:这是最常用、最直接的方法,让内容编辑者在发布文章时能直接上传和管理图片。
- 自定义图片上传功能:如果你想在前台页面(如用户中心、投稿表单)实现图片上传,则需要自己编写代码。
下面我将详细讲解这两种方法。

优化后台编辑器的图片上传(最常用)
DedeCMS默认集成了多种编辑器,百度编辑器UEditor 是功能最强大、使用最广泛的,我们以它为例,讲解如何增加和优化图片上传功能。
步骤 1:确认并切换到UEditor编辑器
- 登录DedeCMS后台。
- 进入 系统 -> 系统基本参数 -> 核心设置。
- 找到 “选择编辑器” 选项,将其值修改为
ueditor。 - 点击“保存”。
- 进入 内容发布 -> 添加文档,检查文章编辑器是否已经切换为UEditor,如果界面和功能更丰富,说明切换成功。
步骤 2:配置UEditor的图片上传路径和权限
这是最关键的一步,决定了图片上传后存放在服务器的哪个位置,以及是否有写入权限。
-
找到UEditor配置文件: 这个文件位于
/include/ueditor/php/config.json。 -
修改图片上传配置: 用代码编辑器(如VS Code, Sublime Text, Notepad++)打开
config.json文件,找到"imageUrlPrefix"和"imagePathFormat"这两个配置项。
(图片来源网络,侵删)-
"imageUrlPrefix":这是图片访问的URL前缀,通常设置为你的网站域名。"imageUrlPrefix": "http://www.yourdomain.com", // 修改为你的网站域名
-
"imagePathFormat":这是图片上传到服务器后的存储路径和文件名格式。"imagePathFormat": "/uploads/images/{yyyy}{mm}{dd}/{time}{rand:6}", // 默认配置,通常足够用{yyyy}: 年{mm}: 月{dd}: 日{time}: 时间戳{rand:6}: 6位随机数- 这个配置会将图片上传到
/uploads/images/年/月/日/目录下,/uploads/images/20251027/163025_123456.jpg。
-
-
检查目录权限: UEeditor上传图片需要向
/uploads/目录及其子目录写入文件,请确保你的服务器(Linux/Windows)对这些目录有 写入权限。- Linux服务器:通常需要将
uploads目录的权限设置为755或775,如果使用FTP/SFTP登录,可以右键目录设置权限。 - Windows服务器:确保IIS或Apache对
uploads目录有“写入”权限。
- Linux服务器:通常需要将
步骤 3:配置远程图片抓取
发布文章时,有时会从其他网站复制内容,里面包含外部图片,UEditor可以自动将这些图片下载到你自己的服务器上,实现图片本地化,避免外链失效。

- 打开
/include/ueditor/php/config.json文件。 - 找到
"catcherLocalDomain"配置项,将你自己的域名添加进去,这样就不会抓取自己网站上的图片。"catcherLocalDomain": ["http://www.yourdomain.com", "http://yourdomain.com"],
- 找到
"catcherImageExtAllow"配置项,确保你允许的图片格式在里面。"catcherImageExtAllow": ["jpg", "jpeg", "png", "bmp", "gif"],
步骤 4:配置图片水印
为了保护版权,你可以为上传的图片自动添加水印。
- 打开
/include/ueditor/php/config.json文件。 - 找到
"waterMark"配置项,并设置其值为1开启水印。"waterMark": { "enable": 1, // 1为开启,0为关闭 "pos": "9", // 水印位置,9表示右下角 "alpha": 80, // 水印透明度 "type": "text", // text为文字水印,image为图片水印 "text": "你的网站名称", // 水印文字 "fontSize": "20", // 字体大小 "fontFamily": "宋体", // 字体 "width": "100", // 图片水印宽度 "height": "100", // 图片水印高度 "url": "" // 图片水印路径,当type为image时使用 }
完成以上步骤后,你的DedeCMS后台图片上传功能就已经非常完善了。
在前台自定义图片上传功能
如果你想在网站的某个前台页面(用户中心”的“我的头像”功能,或者一个自定义的投稿表单)实现图片上传,你需要自己编写PHP代码。
这个过程比修改编辑器配置要复杂,因为它需要处理文件、验证、保存并返回结果。
核心思路
- 创建HTML表单:在前台页面上,一个包含
type="file"的<input>标签和一个提交按钮。 - 编写PHP处理脚本:创建一个PHP文件来接收表单提交的数据。
- PHP脚本处理流程:
a. 接收文件:使用
$_FILES超全局变量获取上传的文件信息。 b. 验证文件:检查文件是否存在、是否为图片、文件大小是否超限、文件后缀是否在允许列表内。 c. 生成安全路径:创建一个安全的、有写入权限的目录来存放上传的图片。 d. 生成唯一文件名:为了避免文件名冲突,使用时间戳和随机数生成新的文件名。 e. 移动文件:使用move_uploaded_file()函数将临时文件移动到最终目录。 f. 返回结果:将上传成功后的图片路径返回给前台,以便后续使用。
示例代码
前台表单页面 (upload_form.html)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">图片上传示例</title>
</head>
<body>
<h1>上传图片</h1>
<form action="upload_handler.php" method="post" enctype="multipart/form-data">
<input type="file" name="my_image" required>
<button type="submit">上传图片</button>
</form>
</body>
</html>
注意:<form> 标签必须有 enctype="multipart/form-data" 属性。
PHP处理脚本 (upload_handler.php)
<?php
// 1. 设置响应头,确保返回JSON格式
header('Content-Type: application/json; charset=utf-8');
// 2. 配置参数
$allowed_extensions = ['jpg', 'jpeg', 'png', 'gif'];
$upload_dir = __DIR__ . '/uploads/'; // 上传目录,确保此目录存在且有写入权限
$max_file_size = 5 * 1024 * 1024; // 最大文件大小 5MB
// 3. 检查目录是否存在,不存在则创建
if (!is_dir($upload_dir)) {
mkdir($upload_dir, 0777, true);
}
// 4. 检查是否有文件上传
if (isset($_FILES['my_image']) && $_FILES['my_image']['error'] == 0) {
$file = $_FILES['my_image'];
$file_name = $file['name'];
$file_size = $file['size'];
$file_tmp_name = $file['tmp_name'];
$file_info = pathinfo($file_name);
$file_extension = strtolower($file_info['extension']);
// 5. 验证文件类型
if (!in_array($file_extension, $allowed_extensions)) {
echo json_encode(['success' => false, 'message' => '不允许的文件类型!']);
exit;
}
// 6. 验证文件大小
if ($file_size > $max_file_size) {
echo json_encode(['success' => false, 'message' => '文件大小超过限制!']);
exit;
}
// 7. 生成唯一文件名
$new_file_name = uniqid('img_') . '.' . $file_extension;
$destination = $upload_dir . $new_file_name;
// 8. 移动文件
if (move_uploaded_file($file_tmp_name, $destination)) {
// 9. 返回成功信息,包含图片的访问路径
$image_url = 'uploads/' . $new_file_name; // 相对路径,方便前端使用
echo json_encode([
'success' => true,
'message' => '上传成功!',
'image_url' => $image_url
]);
} else {
echo json_encode(['success' => false, 'message' => '文件移动失败,请检查目录权限!']);
}
} else {
echo json_encode(['success' => false, 'message' => '没有选择文件或上传出错!']);
}
?>
如何使用这个自定义上传:
- 将
upload_form.html和upload_handler.php放在你的DedeCMS模板目录下。 - 确保在
upload_handler.php同级目录下创建一个名为uploads的文件夹,并赋予其777权限(Linux)或IIS/写入权限(Windows)。 - 通过浏览器访问
upload_form.html即可测试上传。
| 功能场景 | 推荐方法 | 优点 | 缺点 |
|---|---|---|---|
| 后台文章发布 | 修改UEditor配置 | 简单、快速、功能强大、与DedeCMS集成度高 | 只能在后台编辑器中使用 |
| 前台自定义功能(如头像、投稿) | 自定义PHP上传 | 灵活、可控、可完全自定义流程 | 需要编写代码,处理验证、安全等问题 |
对于绝大多数DedeCMS用户来说,方法一 已经完全足够满足日常的图片上传需求,只有在非常特殊的前台交互需求下,才需要考虑方法二。
