🚀 新版本发布:2.0.0-beta.1
作者: @IanM
发布地址: FriendsOfFlarum/upload 发布 2.0.0-beta.1
更新日志
FoF Upload 2.0.0-beta.1
这是 FoF Upload 针对 Flarum 2.0 的首个 Beta 版本。这是一个重要更新——除了 Flarum 2.0 兼容性工作外,还增加了几个期待已久的功能,并修复了大量 Bug。
Flarum 2.0 兼容性
整个扩展已更新以在 Flarum 2.0 上运行。底层关键变化:
- Flysystem 3.x——文件存储层已更新为新的 League Flysystem API,这改变了适配器的构建方式和错误处理方式
- JSON:API 重写——Flarum 2.0 用新的实现替换了 Tobscure JSON:API;所有 API 控制器和序列化器都已相应更新
- PHPUnit 11——测试套件已从 PHPUnit 9 迁移到 PHPUnit 11,包括数据库测试迁移到模型工厂
- LESS 变量——现在全面使用 CSS 变量;亮色或暗色模式变量名已更新以匹配 Flarum 2.0 规范
- 前端基础设施——所有 JS/TS 已根据 Flarum 2.0 的前端变更进行了更新
新功能
WebP 缩略图生成(#465)
图片现在在上传时会自动缩小为缩略图。缩略图在图片预览模板中内联显示;点击后会打开新标签页查看原始全分辨率文件。这可以显著减少图片密集型论坛的带宽消耗。
- 缩略图默认编码为 WebP 格式(同等质量下比 JPEG 小 30%),管理员可选择使用原始格式
- 缩略图最大宽度可配置(默认:1000 像素);小于限制的图片不会被放大
- 缩略图路径存储在数据库中,但完整 URL 在渲染时从实时存储主机名派生——因此 CDN 域名变更会自动反映,无需重新处理
- Imgur 和私有共享上传被排除(Imgur 管理自己的缩略图)
- 新增控制台命令——
php flarum fof:upload:backfill-thumbnails——为在启用该功能之前已存在的上传生成缩略图。支持 --dry-run 和 --chunk 选项,可安全多次运行
按 MIME 类型的上传权限(#461)
MIME 类型映射现在可以有一个可选的权限标签(例如"图片"、"视频")。设置后,Flarum 权限网格中会出现一个专门的权限条目,允许你限制哪些用户组可以上传该特定文件类型——除了始终需要的"上传文件"基础权限之外。
这完全向后兼容:没有标签的现有映射继续像以前一样运行,仅受基础上传权限控制。
图片尺寸存储与 CLS 预防(#464)
JPEG、PNG 和 GIF 上传的宽度和高度现在存储在数据库中。这些信息作为 width 和 height 属性注入到图片预览模板的 <img> 标签中,允许浏览器在图片加载前预留正确的空间——防止累积布局偏移(CLS)。
控制台命令——php flarum fof:upload:backfill-dimensions——为现有图片回填尺寸信息。
水印改进(#462)
水印系统已显著改进:
- 按比例调整大小——水印大小现在设置为图片宽度的百分比(例如 20%),因此可以在不同图片尺寸下正确缩放,而不是固定像素大小
- 透明度控制——可配置 0–100%
- 边距——可配置距离图片边缘的像素距离
- 所有设置均可从管理面板调整;动画 GIF 被排除在水印处理之外
Bug 修复
为第三方适配器存储正确的适配器键(#466)
第三方适配器使用自定义键注册(例如 'blomstra'),但 upload_method 是从类名派生的(例如 'blomstraobjectstorage')。这种不匹配导致每次后续查找都出现 ValidationException——URL 生成、文件清理、GDPR 导出和缩略图回填都会因受影响的适配器而失败。修复方法是在实例化时直接将规范注册键标记在适配器实例上。
所有模板的文件-帖子映射已修复(#459)
某些上传模板的文件到帖子的关联创建或清理不正确。这影响了特定模板类型的媒体管理器、GDPR 导出和孤立文件清理功能。
图片预览模板中的替代文本 Bug(#463)
{TEXT?} 占位符被一字不差地存储在旧帖子的帖子 XML 中。格式化程序现在会清理此值,并在无法获取时回退到文件的基本名称,与预期行为一致。
PHP fileinfo 扩展现在为可选(#467)
如果没有 fileinfo PHP 扩展,mime_content_type() 会抛出未捕获的异常,导致所有上传都以通用错误失败。MIME 检测器现在在调用前检查 fileinfo 是否加载。当缺失时,上传继续使用基于魔数的 SoftCreatR\MimeDetector 库工作。管理员会在设置页面上看到一个警告横幅,说明 MIME 交叉验证层已禁用,以及如何重新启用。
升级说明
需要 Flarum 2.0。 此版本不支持 Flarum 1.x;Flarum 1.x 安装请继续使用 1.x 分支。
升级后运行迁移:php flarum migrate
S3 或兼容存储用户: 底层 Flysystem AWS S3 适配器已从 v1 更新到 v3。你必须在项目中升级包:
composer require league/flysystem-aws-s3-v3:"^3.0"
v1 包(league/flysystem-aws-s3-v3:^1)不再与此版本兼容。
可选:为现有内容运行回填命令:
php flarum fof:upload:backfill-dimensions——添加存储的图片尺寸
php flarum fof:upload:backfill-thumbnails——为现有图片生成缩略图(大型论坛可能需要一些时间;建议先使用 --dry-run)
第三方上传适配器扩展(例如 blomstra/object-storage)需要更新以兼容 Flarum 2.0 / Flysystem 3.x,然后才能与此版本一起使用。
变更内容
完整更新日志:FriendsOfFlarum/upload 1.8.8 → 2.0.0-beta.1