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函数中文件名生成逻辑,替代系统默认的随机命名;
必须兼顾 “原文件名保留”“中文乱码处理”“同名文件覆盖” 三个核心问题;
操作前备份文件,修改后通过后台上传附件验证功能是否正常。
广东鲸弘科技有限公司专注惠州网站建设、惠州小程序开发、企业官网定制、微信小程序开发等服务,欢迎咨询合作。
-
2026 年 4 月惠州官网建设价格表,市场价报价明细
2026-04-10
4 -
惠州企业官网小程序开发 - 品牌展示 + 客户留存
2025-11-30
53 -
广州响应式官网建设_手机电脑自适应网站
2026-03-11
25 -
2026年4月惠州官网建设哪家专业?本地实力公司盘点
2026-04-07
10 -
惠州小程序定制开发 - 满足全行业需求
2025-11-30
54 -
电商小程序购物车开发:本地缓存 + 同步服务端数据一致性策略
2025-12-19
71 -
外贸网站多语言开发:i18n 国际化适配与 SEO 友好性实现
2025-12-18
59 -
2026 惠州制造业小程序开发应用场景
2026-03-16
24 -
深圳做网站多少钱_2026 官网建设报价
2026-03-12
53 -
2026 惠州商贸公司网站建设产品展示方案
2026-03-19
14
咨询热线:
联系电话
联系邮箱
联系QQ
方案获取
