修复:图标存储未跟随后台配置,本地模式下图标显示不出来
用户指出图标应当与附件同一套逻辑:管理员在后台配 local 就存本机、 配 oss 就存 OSS,前台都一样走 media.php 代理。 原实现把图标键硬编码成 icons/…(不带存储前缀),导致: - fb_attach_is_local() 恒为 false - 本机模式下文件确实写进了 uploads/icons/, 但 media.php 把它当 OSS 对象去读 → 503,图标完全显示不出来 修法:图标键与附件完全同规则,只是路径里多一段 icons/ local 模式 → local/icons/YYYY/MM/<hex>.<ext> 落 uploads/icons/ oss 模式 → <oss.prefix>/icons/YYYY/MM/<hex>.<ext> 落私有桶 前台地址两种模式一致(media.php?k=…),换存储方式旧图标不会失效。 同时: - fb_icon_is_key/ok 改为同时识别两种前缀 - fb_icon_allowed_ext 移到 attach.php(media.php 与校验都会用, 不能依赖 admin_taxonomy.php 被加载) - 写入时加断言:键前缀必须与当前存储模式一致,脱钩就报错, 不再静默存到错误位置 验证(线上真实环境,两种模式各跑一遍): - local:键带 local/icons/ 前缀、写入 uploads/icons/ 成功、 media.php 读回 200 image/png 501B、PNG 魔数正确、删除后 404 - oss:键带 fb/icons/ 前缀、is_local=false、URL 拼接正确 - 旧 bug 形态(icons/… 无前缀)现在被明确拒绝 400,不再误判成 OSS - 测试后配置已复原为 oss,临时文件与诊断入口全部清理
This commit is contained in:
+1
-1
@@ -8,7 +8,7 @@ if (!defined('FB_ROOT')) {
|
||||
define('FB_ROOT', dirname(__DIR__));
|
||||
// 静态资源版本号:改 assets/ 下的 css/js 后把这个数字 +1,
|
||||
// 让浏览器与 CDN 缓存失效。全站只此一处,别再往页面里写死数字。
|
||||
if (!defined('FB_ASSET_V')) { define('FB_ASSET_V', 18); }
|
||||
if (!defined('FB_ASSET_V')) { define('FB_ASSET_V', 19); }
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user