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-08-22
70 -
网站上线百度搜不到?鲸弘科技 10 年 SEO 实战:8 个免费方法快速破局,避开 90% 新手坑
2025-08-23
59 -
如何开发一款赚钱的上门家政小程序?功能设计 + 盈利模式全解析
2025-12-01
40 -
惠州小程序开发公司排名权威吗?2025 真实案例支撑的本地服务商排名
2025-10-12
50 -
按摩小程序开发公司:从需求到上线,全程对接的本地开发团队推荐
2025-10-28
39 -
如何在惠州选对小程序开发公司?真实口碑与案例深度揭秘
2025-09-06
55 -
惠州本地小程序开发公司排名:惠城 / 仲恺高口碑服务商汇总(避坑指南)
2025-08-29
60 -
惠州按摩小程序开发公司推荐:支持预约排班 / 技师管理 / 在线支付的专业团队
2025-11-03
39 -
PbootCms 附件上传保留原文件名:V3.x 版本实操教程(含代码修改)
2026-01-08
0 -
小程序审核驳回常见原因:代码违规 + 功能异常 + 内容问题解决方案
2025-12-29
17
咨询热线:
联系电话
联系邮箱
联系QQ
方案获取
