PbootCms 附件上传保留原文件名:V3.x 版本实操教程(含代码修改)
本文由广东鲸弘科技有限公司提供惠州小程序开发 / 网站建设专业分享。

核心需求复述
你希望在 PbootCms 系统中实现附件上传时保留文件的原始名称,替代系统默认的随机字符串重命名规则,这能让你更直观地管理和识别上传的附件,是 PbootCms 使用中典型的个性化定制需求。
解决方案(适配 PbootCms V3.x 主流版本)
前置准备
操作前务必备份目标文件(防止修改出错导致上传功能异常),确认你的 PbootCms 版本为 V3.x(不同版本文件路径略有差异,以下为通用方案)。
步骤 1:定位附件上传核心处理文件
PbootCms 的附件上传逻辑主要在core/function/extend.php文件中,找到名为upload_file的函数(附件上传核心函数);若你的版本中上传逻辑在admin/model/system/UploadModel.php,可参考相同逻辑修改。
步骤 2:修改文件名生成逻辑
系统默认会生成随机字符串作为新文件名,我们需要修改为 “原文件名 + 时间戳(避免同名覆盖)” 的格式,同时处理中文文件名乱码问题。
原始核心代码段(默认重命名部分):
// 生成随机文件名(默认逻辑) $filename = random_string(16) . '.' . $ext; $filepath = $upload_path . $filename;
修改后的代码段(保留原文件名):
// 保留原文件名核心逻辑
// 1. 获取原始文件名(去除路径,仅保留文件名)
$original_name = basename($_FILES[$name]['name']);
// 2. 分离原文件名和后缀
$original_name_arr = explode('.', $original_name);
$ext = array_pop($original_name_arr); // 后缀
$original_name = implode('.', $original_name_arr); // 纯原文件名
// 3. 过滤特殊字符+处理中文乱码(防止安全问题和乱码)
$original_name = iconv('UTF-8', 'GBK//IGNORE', $original_name); // 解决中文乱码
$original_name = preg_replace('/[^w-.]/', '', $original_name); // 过滤特殊字符
// 4. 拼接“原文件名+时间戳+后缀”(避免同名文件覆盖)
$filename = $original_name . '_' . time() . '.' . $ext;
$filepath = $upload_path . $filename;步骤 3:完整上传函数示例(关键部分标注)
/**
* 文件上传函数(修改后保留原文件名版)
* @param string $name 表单名称
* @param string $upload_path 上传路径
* @return array
*/
function upload_file($name = 'file', $upload_path = './upload/file/') {
// 基础配置(省略系统原有校验代码,仅展示文件名核心修改)
$upload_path = rtrim($upload_path, '/') . '/';
! is_dir($upload_path) && mkdir($upload_path, 0755, true);
// 获取文件信息
$file = $_FILES[$name];
$ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
// ========== 核心修改:保留原文件名 ==========
// 1. 获取原始文件名并处理
$original_name = basename($file['name']);
$original_name_arr = explode('.', $original_name);
$ext = array_pop($original_name_arr);
$original_name = implode('.', $original_name_arr);
// 2. 过滤特殊字符+中文转码(避免乱码/安全问题)
$original_name = iconv('UTF-8', 'GBK//IGNORE', $original_name);
$original_name = preg_replace('/[^w-.]/', '', $original_name);
// 3. 生成最终文件名(原文件名+时间戳,防止同名覆盖)
$filename = $original_name . '_' . time() . '.' . $ext;
$filepath = $upload_path . $filename;
// ==========================================
// 执行上传(系统原有逻辑,无需修改)
if (move_uploaded_file($file['tmp_name'], $filepath)) {
return [
'code' => 1,
'msg' => '上传成功',
'file' => str_replace('./', '/', $filepath),
'name' => $filename, // 前端显示保留原文件名(可直接用$original_name)
'size' => $file['size']
];
} else {
return ['code' => 0, 'msg' => '上传失败'];
}
}步骤 4:测试验证
登录 PbootCms 后台,进入 “系统管理 - 附件管理”;
上传一个带中文 / 特殊命名的文件(如 “产品说明书 V2.0.pdf”);
查看上传后的文件名称,应为 “产品说明书 V2.0_1735689000.pdf”(时间戳为上传时的秒数),确认文件名保留原始名称且无乱码。
关键注意事项
同名文件处理:必须添加time()时间戳,否则新上传的同名文件会覆盖旧文件;
中文乱码:iconv转码是关键,若服务器编码为 UTF-8,可调整为iconv('GBK', 'UTF-8//IGNORE', $original_name);
安全过滤:preg_replace过滤特殊字符(如/ : * ? " < > |),防止恶意文件名导致的安全问题;
版本适配:若你的 PbootCms 为 V2.x,上传函数路径可能为core/common/function.php,逻辑完全通用。
总结
核心是修改upload_file函数中文件名生成逻辑,替代系统默认的随机命名;
必须兼顾 “原文件名保留”“中文乱码处理”“同名文件覆盖” 三个核心问题;
操作前备份文件,修改后通过后台上传附件验证功能是否正常。
-
惠州小程序开发公司排名:2025 本地团队 VS 外地公司,选哪家更靠谱?
2025-10-20
117 -
2026 惠州小程序开发多少钱?专业公司为你解答
2026-03-15
46 -
广东网站维护公司怎么选?这3个标准帮你筛掉不靠谱的
2026-05-08
13 -
在惠州,做个企业网站到底要花多少钱?这份2026年的价格清单请收好
2026-05-25
13 -
惠城区高端网站建设公司,2026年如何打造高转化官网?
2026-04-17
30 -
2026 惠州商城小程序开发:线上营销新渠道
2026-03-16
34 -
企业官网开发:前后端分离架构(Vue+SpringBoot)实战指南
2025-12-18
160 -
2026 小程序开发核心功能:AI 智能咨询 + 数据枢纽 + 多场景适配
2025-12-13
96 -
2026 惠州中小企业小程序开发性价比分析
2026-03-17
40 -
2026 惠州官网 SEO 优化:快速收录技巧
2026-03-19
38
咨询热线:
联系电话
联系邮箱
联系QQ
方案获取
