附件下载前缀插件
为论坛附件下载自动添加可配置前缀,支持自定义分隔符与实时预览,下载时自动应用规则。
功能概述
用户下载附件时,系统自动在原文件名前拼接管理员配置的前缀
仅修改下载时的输出文件名,不改动服务器存储的源文件名称与路径
支持两种前缀格式:
包装模式:括号包裹前缀,如
【前缀名】文件名.rar、[前缀名]文件名.rar分隔符模式:分隔符连接,如
前缀名_文件名.rar、前缀名-文件名.rar
自动过滤前缀中的非法文件名字符(\ / : * ? " < > |)
后台实时预览最终下载文件名效果
配置即时生效,无需清理缓存
安装与卸载
安装
将
navgcn_attach_prefix目录上传至plugin/目录进入后台 → 插件管理 → 找到「附件下载前缀插件」→ 点击安装
安装完成后,插件默认前缀为空,不影响现有下载功能
卸载
进入后台 → 插件管理 → 找到「附件下载前缀插件」→ 点击卸载
卸载将清除所有插件配置数据,不影响附件文件
后台配置
进入后台 → 插件管理 → 附件下载前缀插件 → 设置
下载前缀:输入前缀内容,支持中文、英文、数字及常规符号
包装样式:选择是否用括号包裹前缀(如
【前缀名】、[前缀名]),选择"无包装"则使用分隔符分隔符:无包装时,选择前缀与文件名之间的分隔符,支持自定义输入
效果预览:实时展示当前配置下的下载文件名效果
点击「保存设置」即时生效
注意事项
前缀为空时,附件下载保持原始文件名,不影响论坛正常下载功能
前缀中的非法文件名字符(\ / : * ? " < > |)会自动过滤
分隔符若选择「自定义」,需在右侧输入框中填写自定义分隔符
选择包装样式后,分隔符设置自动隐藏(包装模式下不使用分隔符)
仅拥有管理权限的用户(gid=1 或 gid=2)可访问配置页面
常见问题
Q: 配置前缀后,旧附件下载是否也会生效? A: 是的,配置即时生效,所有附件下载(包括旧附件)都会自动应用前缀规则。
Q: 前缀是否会影响服务器上存储的文件? A: 不会,仅修改下载时浏览器收到的文件名(Content-Disposition 头),服务器存储的源文件名称和路径完全不变。
Q: 支持哪些下载方式? A: 同时支持附件下载(attach-download)和附件提取(attach-fetch)两种方式。
更新日志
v1.0.0 (2026-07-23)
初始版本发布
支持下载文件名自动添加前缀
支持两种前缀格式:包装模式(【前缀】文件名)和分隔符模式(前缀_文件名)
支持多种分隔符选择与自定义输入
后台实时预览效果
自动过滤非法文件名字符
文件目录结构
navgcn_attach_prefix/
├── conf.json # 插件配置(名称、版本、hooks_rank)
├── install.php # 安装脚本(初始化默认配置)
├── uninstall.php # 卸载脚本(清理配置数据)
├── setting.php # 后台设置入口(权限校验 + CSRF + 保存逻辑)
├── readme.md # 说明文档
├── model/
│ └── NavgcnAttachPrefixService.php # 核心 Service 类(配置读写、前缀过滤、文件名拼接)
├── hook/
│ ├── model_inc_file.php # 注册 Service 类到框架
│ ├── attach_start.php # 下载/提取请求时设置全局标记
│ ├── model_attach_read_end.php # 在 attach_read() 内修改 orgfilename 添加前缀
│ └── lang_zh_cn_bbs.php # 中文语言包
├── view/
│ └── htm/
│ └── setting.htm # 后台配置页面(Bootstrap 5 + Tabler Icons + 实时预览 JS)
└── static/
└── js/ # 预留 JS 目录自检报告
检查项 | 结果 |
|---|---|
conf.json 必填字段完整(name/brief/version/bbs_version/installed/enable) | PASS |
hooks_rank 键名与 hook 文件名一致 | PASS |
version 三位制(X.Y.Z) | PASS |
bbs_version 两位制(1.0) | PASS |
install.php 初始化默认配置 + 清理 model.min.php | PASS |
uninstall.php 标准拼写 + 清理配置 | PASS |
setting.php 权限检查(gid=1/2) | PASS |
POST 操作含 CsrfService::input() + CsrfService::check() | PASS |
PHP hook 文件以 | PASS |
所有 hook 无 | PASS |
无 jQuery / Alpine.js | PASS |
前端 Bootstrap 5 + Tabler Icons | PASS |
Card 组件使用 | PASS |
输出使用 esc_html() / esc_attr() | PASS |
无硬编码 URL 后缀 | PASS |
命名全带 navgcn_ 前缀(类名/变量/语言键/form字段/DOM ID) | PASS |
Service 类静态方法模式 | PASS |
空值兼容(前缀为空返回原文件名) | PASS |
非法字符过滤(\ / : * ? " < > |) | PASS |
包装模式 + 分隔符模式双模式 | PASS |
配置即时生效,无需清缓存 | PASS |
同时覆盖 download 和 fetch 两种下载方式 | PASS |
后台模板 include admin header/footer | PASS |
无数据库表依赖 | PASS |
截图 3
初始版本发布
支持下载文件名自动添加前缀
支持两种前缀格式:包装模式(【前缀】文件名)和分隔符模式(前缀_文件名)
支持多种分隔符选择与自定义输入
后台实时预览效果
自动过滤非法文件名字符
