FIT2CLOUD
存储工具箱 的图标

存储工具箱

3,107
2,318

Halo 存储增强插件 - 支持图片处理、格式转换、水印添加等功能

0.3.0
TimOxO 发布于

v0.3.0

最新
>=2.22.1

✨ 新功能 / 改进

  • Halo 2.23 兼容性 - 升级至 Halo 2.23 平台,适配 Spring Framework 7.x
  • URL 引用替换 - 批量处理覆盖原文件后自动替换内容中的旧附件链接;删除重复附件时自动将引用转移到保留的附件;支持
    从断链检测结果中手动修复失效 URL
  • 批量处理功能 - 新增批量压缩、水印、格式转换功能,支持来源标签显示
  • 断链检测功能 - 扫描失效附件链接,支持白名单过滤
  • 白名单功能 - 支持配置忽略特定 URL 模式,白名单添加时自动去重,并同步删除断链记录
  • 格式转换优化 - 完善 AVIF 格式支持,优化透明通道处理;优化水印和格式转换场景的智能跳过逻辑,改进 JPEG
    重编码质量
  • App 端上传适配 - 统一使用 decorateExchange + chain.filter()
  • 引用扫描优化 - 动态获取文章/页面永久链接,避免硬编码主题路由;文档版本发布状态标注

🐛 问题修复

  • 修复下游存储失败时静默回退原图的问题,提取共享处理方法
  • 统一断链扫描状态,修复扫描按钮显示异常
  • 统一 ReferenceEndpoint 中 Moment 和 SinglePage 的位置 URL 处理
  • 修复 .gitignore 误忽略 logs 子目录导致 UrlReplaceLogTab.vue 未提交

❤️ 贡献者

  • @Burgess-T - 优化文章永久链接获取逻辑,避免硬编码主题路由

📋 完整更新日志

本版本历经 3 个 Beta 候选版本(v0.3.0-beta.1v0.3.0-beta.2)和 2个 RC 候选版本(v0.3.0-rc.2v0.3.0-rc.3)测试验证,现已发布正式版。


Generated from v0.3.0

资源下载

  • plugin-storage-toolkit-0.3.0.jar
0.3.0-rc.3
TimOxO 发布于

v0.3.0-rc.3

预发布
>=2.22.1

✨ 新功能 / 改进

  • 图库引用精确到分组 - 图库引用 URL 携带 group 参数(如 /photos?group=photo-group-xxx),点击可直达对应分组
  • 文档版本发布状态标注 - 引用扫描新增版本级别判定:通过 DocTree 关联
    ProjectVersion,版本未发布标记为未发布,已发布按页面状态标记草稿/内容

🐛 问题修复

  • 引用位置 URL 动态获取 - 文章、独立页面、瞬间优先从 status.permalink 获取链接,支持自定义路由规则,不再硬编码
    /archives/ 等路径
    • ReferenceEndpoint: 新增 resolvePostPermalink() 方法,修复前端展示 Comment/Reply 关联文章时的跳转链接
    • ReferenceServiceImpl: 扫描和展示统一使用 status.permalink,移除硬编码 fallback

❤️ 贡献者

📋 完整更新日志


Generated from v0.3.0-rc.3

资源下载

  • plugin-storage-toolkit-0.3.0-rc.3.jar
0.3.0-rc.2
TimOxO 发布于

v0.3.0-rc.2

预发布
>=2.22.1

✨ 新功能 / 改进

  • 水印 + 格式转换智能协同 - 有水印时不再直接跳过格式转换,而是比较目标格式与带水印原格式的体积,自动选择更小的方案
  • AVIF 格式支持完善 - 修复 AVIF 透明通道处理,格式转换保留 Alpha 通道(不再强制转 RGB)
  • JPEG 重编码质量改进 - 水印回退原格式场景下使用 0.85 质量参数,避免 ImageIO 默认质量(约 0.75)导致画质下降

🐛 问题修复

  • 修复下游存储失败时静默回退原图的问题 - 图片处理成功(如已加水印)后,如果下游存储策略(如 LskyPro)上传失败,不再静默回退为未处理的原图,而是将错误正确传播到前端,避免水印被无感丢失
  • 修复白名单重复添加问题 - 添加白名单时先查重,避免重复创建;同时自动删除匹配的断链记录
  • 修复断链扫描状态不一致 - 统一由引用扫描状态管理扫描阶段,修复扫描按钮显示异常

🔧 内部优化

  • 提取 doProcessImage 共享方法,消除编辑器上传和附件管理上传的重复代码
  • 白名单批量添加错误处理改为静默跳过,不再中断整个批次

📋 完整更新日志


Generated from v0.3.0-rc.2

资源下载

  • plugin-storage-toolkit-0.3.0-rc.2.jar
0.3.0-rc.1
TimOxO 发布于
>=2.22.1

🎉开工大吉~

✨ 新功能

  • 附件库分析 - 新增断链检测、引用扫描、重复文件检测,支持一键清理未引用和重复附件
  • 批量处理 - 支持对已上传附件进行批量压缩、水印、格式转换
  • URL 引用自动替换 - 删除/替换附件时自动更新文章、页面、评论、设置等所有内容中的引用链接
  • 断链一键替换 - 将失效链接替换为新 URL,自动修改所有引用位置
  • HTTP 代理支持 - 断链检测支持通过 HTTP 代理访问,适用于无法直连外网的服务器
  • 内置中文水印字体 - 内置文泉驿微米黑,解决 Docker 等环境下水印乱码问题
  • 清理日志 & URL 替换日志 - 完整记录所有删除和替换操作详情

🐛 问题修复

  • 修复 App 端上传图片未经处理直接存储的问题rc.1 新增
  • 修复并发 Semaphore 竞态、大文件绕过限制、扫描状态不一致等多项稳定性问题
  • 修复轮询定时器内存泄漏、批量处理进度清除竞态等前端问题
  • 修复日志统计性能问题,改用 Extension 索引查询

🔧 改进优化

  • 断链检测架构重构,支持自定义超时和并发数
  • 内容扫描器使用 Jsoup 重构,提升 URL 提取准确性
  • 新增 ContentUpdateHandler 接口体系,各内容类型独立处理 URL 替换
  • 重复文件删除时可自动替换引用,推荐保留项优先选择引用次数最多的文件,相同则选最晚上传的
  • API 路径规范化(去除连字符),Extension 索引优化,日志级别优化

⚠️ 升级须知(自 0.2.x 升级)

  • 设置分组 global 重命名为 basic,升级后需重新配置
  • 断链检测、重复检测配置独立为新分组
  • REST API 路径有变更,如有外部集成请注意更新
  • URL 引用替换会直接修改内容,请务必备份后再使用
  • 删除操作不可逆,操作前请做好备份

📋 详细更新日志


Generated from 0.3.0-rc.1

资源下载

  • plugin-storage-toolkit-0.3.0-rc.1.jar
0.3.0-beta.2
TimOxO 发布于

v0.3.0-beta.2

预发布
>=2.22.1

🎉新年快乐!

此版本为测试版本,改动较大,使用时请务必备份数据库和附件!

✨ 新功能

  • URL 引用自动替换 - 全新的引用替换系统,支持在文章、页面、评论、回复、用户资料、系统/主题/插件设置、瞬间、图库、
    文档等所有内容类型中自动替换 URL 引用
  • 断链一键替换 - 断链详情面板新增「替换为新 URL」功能,可将断链 URL 替换为有效链接,自动修改所有引用位置
  • 重复文件删除时自动替换引用 - 删除重复附件时可选择自动将内容中的旧链接替换为保留附件的链接
  • 批量处理自动替换引用 - 批量处理(压缩/格式转换/水印)导致文件名变化时,可自动更新内容中的旧链接
  • URL 替换日志 - 记录每一处 URL 替换操作的详情(旧/新 URL、来源类型、内容名称、成功/失败状态),支持分页查询和清
  • 内置中文水印字体 - 内置文泉驿微米黑字体,解决 Docker 等无中文字体环境下水印文字乱码问题
  • 自定义水印字体 - 设置面板新增字体名称配置项,支持指定服务器已安装的字体
  • 断链原因展示 - 断链结果新增显示断链原因(HTTP 404、连接失败等)和原始 URL
  • 断链按原因筛选 - 断链列表新增原因过滤下拉框,可按 HTTP 404、连接失败等类型快速定位特定断链
  • HTTP 代理支持 - 新增代理设置,断链检测和链接检查支持通过 HTTP 代理进行,适用于无法直接访问外网的服务器环境
  • 重复文件引用信息展示 - 重复文件列表新增显示各文件在内容中的引用情况,辅助判断应保留哪个文件

🐛 问题修复

  • 修复前端扫描状态不一致 - 统一前后端状态常量(errorERRORscanningSCANNINGcompleted
    COMPLETED
  • 修复扫描错误回调静默失败 - 扫描错误时的 subscribe 回调增加错误处理,避免状态更新失败被吞掉
  • 修复断链扫描状态残留 - 引用扫描失败时同步将断链扫描状态更新为 ERROR,避免断链扫描永远停留在 SCANNING
  • 修复重复检测未排除分组/策略 - 重复文件扫描现在正确应用排除分组和排除策略过滤
  • 修复批量处理文案错误 - 「将被可能会被会重命名」修正为「将会被重命名」
  • 修复轮询定时器内存泄漏 - 分析面板各 Tab 组件卸载时正确清理轮询和防抖定时器,避免组件销毁后定时器继续运行
  • 修复批量处理进度清除竞态 - 内存进度清除时机从处理中移至 doOnSuccess 回调,避免处理完成前提前清除进度
  • 修复日志统计性能问题 - 处理日志和清理日志的统计逻辑从 Endpoint 层全量加载内存聚合改为 Service 层使用 Extension
    索引查询
  • 修复断链白名单 API 路径错误 - 前端白名单接口地址修正为正确端点
  • 修复白名单添加使用错误 URL - 白名单添加改为使用 originalUrl,与实际检测 URL 保持一致

🔧 改进优化

  • 断链检测架构重构 - 断链检测逻辑从 ReferenceServiceImpl 抽离为独立的 BrokenLinkDetector
    LinkChecker,支持自定义 HTTP 检测超时和检测并发数
  • 引用扫描上下文重构 - 新增 ReferenceScanContext 统一管理扫描状态,取代散落的 ConcurrentHashMap
  • 内容更新处理器架构 - 新增 ContentUpdateHandler 接口体系,各内容类型(Post/Page/Comment/ConfigMap/Plugin
    等)独立处理 URL 替换
  • 引用列表组件复用 - 新增 ReferenceList 公共组件,断链/引用/重复三个 Tab 统一展示引用来源
  • 水印字体多级回退 - 智能加载策略:用户指定字体 → 内置中文字体 → 系统默认字体
  • Extension 索引优化 - ProcessingLog、CleanupLog 和 UrlReplaceLog 新增时间、状态、来源、文件名等索引,提升查询性
  • 统一乐观锁重试 - 新增 RetryUtils 统一重试策略,替换各处散落的重试代码
  • 统一超时计算 - 新增 TimeoutUtils,连接超时自动取配置值的 1/3(上限 30s)
  • 推荐保留策略优化 - 重复文件推荐保留项改为选择最晚上传的(而非最早),推荐项不再禁用勾选
  • 清理日志端点独立 - 清理日志 API 从 CleanupEndpoint 拆分为独立的 CleanupLogEndpoint
  • 处理来源和清理原因枚举化 - ProcessingSourceCleanupReason 从字符串改为枚举类型,提高类型安全
  • 支持 DocTree 扫描 - 引用扫描新增对 doc.halo.run/v1alpha1/DocTree 类型的支持
  • 清理日志 UI 重构 - 统计卡片和表格样式更新
  • API 路径规范化 - REST API 路径统一去除连字符(batch-processingbatchprocessingbroken-links
    brokenlinkscleanup/logscleanuplogs
  • 移除 Overview 端点 - 移除不再使用的仪表盘概览端点,简化 API 结构
  • URL 替换安全机制 - 新增 UrlReplacer 工具类,基于正则的安全 URL 替换,避免替换完整 URL 内部的相对路径子串
  • ContentScanner 路径匹配优化 - 相对路径匹配范围扩大,新增位置排除逻辑避免将完整 URL 内的子路径误匹配为相对路径
  • 日志级别优化 - 常规操作日志从 info 降为 debug,可恢复错误从 error 降为 warn,减少日志噪音
  • 批量处理下载兼容性 - 下载请求添加 User-AgentReferer 请求头,提高与目标服务器的兼容性
  • 角色模板权限调整 - displayName 从「存储工具箱查看」改为「存储工具箱管理」,更准确反映权限范围
  • BrokenLinkScanStatus GVK 修正 - plural/singular 从 brokenlinkstatuses 修正为 brokenlinkscanstatuses
  • 前端筛选自动重置页码 - 处理日志筛选条件变更时自动重置到第一页

⚠️ 配置变更

  • 设置分组 global 重命名为 basic(基础设置),升级后可能需要重新配置
  • 重复检测配置独立为 duplicateScanning 分组
  • 断链检测配置独立为 brokenLink 分组,新增 HTTP 超时(1-30秒)和并发数(1-20)配置
  • downloadTimeoutSeconds 从批量处理设置移至基础设置(全局共用)
  • 最大文件大小默认值从 10MB 调整为 20MB
  • 排除分组/排除策略的作用范围扩展至引用扫描、重复检测和断链检测
  • 断链检测新增「检测外部链接」开关和「附件 URL 前缀」配置
  • 新增代理设置组 - proxy 分组,包含代理开关、代理主机、代理端口三项配置
  • 水印字体 fontName 默认值从 SansSerif 改为空(空值时自动使用内置中文字体)

⚠️ 注意事项

[重要] 此版本为测试版本,改动较大,升级前请务必备份数据库和附件!

[重要] URL 引用替换为测试版功能,会直接修改文章/页面/评论/设置中的内容,请谨慎使用并做好备份!

[重要] 批量处理模式下,如选择"不保留原图",原文件将被删除,可能导致原有引用链接失效!请谨慎操作或选择"保留原图"模式。

[重要] 删除操作不可逆!删除重复文件或未引用文件前,请务必确认并做好备份。

[重要] 设置分组结构有调整(globalbasic),升级后请检查并重新配置相关选项。

[重要] REST API 路径有变更(去除连字符),如有外部集成或自定义脚本请注意更新接口地址。


Generated from v0.3.0-beta.2

资源下载

  • plugin-storage-toolkit-0.3.0-beta.2.jar
0.3.0-beta.1
TimOxO 发布于

v0.3.0-beta.1

预发布
>=2.22.1

此版本为测试版本,改动较大,使用时请务必备份数据库和附件!

✨ 新功能

  • 批量处理 - 支持对已上传附件进行批量压缩、水印、格式转换,显示处理进度和统计结果
  • 死链检测 - 扫描文章、页面、评论、瞬间、图库、文档等内容中引用的失效附件链接
  • 死链白名单 - 支持将特定 URL 加入白名单忽略检测(支持精确匹配和前缀匹配两种模式)
  • 重复文件删除 - 支持删除重复文件并释放存储空间
  • 未引用文件删除 - 支持删除未被任何内容引用的附件
  • 清理日志 - 记录所有删除操作详情(删除原因、文件大小、操作者、删除时间等)
  • 删除预览 - 删除前可预览将释放的空间和有引用的文件数量
  • 处理日志来源筛选 - 处理日志新增按来源筛选功能

🐛 问题修复

  • 修复并发 Semaphore 竞态问题 - 确保 acquire 和 release 使用同一个 Semaphore 对象,避免配置变更时的并发问题
  • 修复大文件绕过限制 - 增加读取数据后的二次文件大小校验,防止 Content-Length 为 -1 时绕过限制
  • 已删除文件过滤 - 修复删除附件后立即扫描仍显示已删除文件的问题
  • 服务重启检测 - 修复服务重启后扫描任务状态卡在"进行中"无法重新触发的问题

🔧 改进优化

  • 内容扫描器重构 - 使用 Jsoup 解析 HTML,提升 URL 提取准确性,支持更多标签(iframe、embed、object、背景图片等)
  • 重复文件列表增强 - 重复文件列表新增显示存储策略名称(policyName)
  • 重复文件详情增强 - 预览显示存储策略和分组的友好名称
  • 水印图片缓存 - 图片水印缓存 30 分钟,批量处理不再重复下载
  • MD5 超时配置 - 新增单文件 MD5 计算超时配置(30-300 秒)
  • 清理日志自动清理 - 定时任务同时清理过期的 ProcessingLog 和 CleanupLog
  • WebFilter 插件冲突修复 - 处理成功时直接上传返回,避免被下游插件覆盖

⚠️ 配置变更

  • scanTimeoutMinutes 配置已移除,新增 md5TimeoutSeconds 配置,升级后需重新设置

⚠️ 注意事项

[重要] 此版本为测试版本,改动较大,升级前请务必备份数据库和附件!

[重要] 批量处理模式下,如选择"不保留原图",原文件将被删除,可能导致原有引用链接失效!请谨慎操作或选择"保留原图"模式。

[重要] 删除操作不可逆!删除重复文件或未引用文件前,请务必确认并做好备份。


Generated from v0.3.0-beta.1

资源下载

  • plugin-storage-toolkit-0.3.0-beta.1.jar
0.2.2
TimOxO 发布于
>=2.22.1

新功能

  • 添加 WebP/AVIF 压缩等级配置
  • 添加 roleTemplate 权限管理(可在 用户 - 角色管理 中设置访问权限)

改进

  • 水印配置添加必填校验
  • 使用 Dialog 组件替换原生 confirm 弹窗
  • 移除后端 @PreAuthorize 注解
  • 移除附件跳转扩展点

Generated from v0.2.2

资源下载

  • plugin-storage-toolkit-0.2.2.jar
0.2.2-beta.1
TimOxO 发布于

v0.2.2-beta.1

预发布
>=2.22.1

新增功能

  • 新增 WebP/AVIF 压缩等级配置,可在设置中调整(值越大压缩越慢但文件越小)

注意事项

这是预览版本,如遇问题请反馈 Issues


Generated from v0.2.2-beta.1

资源下载

  • plugin-storage-toolkit-0.2.2-beta.1.jar
0.2.1
TimOxO 发布于
>=2.22.1

🎉 新功能

AVIF 格式支持

  • 新增 AVIF 图片格式转换支持
  • 支持将图片转换为 AVIF 格式(压缩率更高,兼容性稍差)

存储统计

  • 按文件类型统计(图片、视频、文档等)
  • 按存储策略统计
  • 按分组统计
  • 可视化图表展示

重复文件检测

  • 基于 MD5 哈希值检测重复文件
  • 显示可节省空间
  • 支持批量删除重复文件
  • 智能推荐保留文件

附件引用扫描

  • 扫描文章、页面内容中的附件引用
  • 扫描封面图、评论、回复
  • 扫描系统设置、插件设置、主题设置
  • 可选扫描瞬间、图库、文档(需在设置中开启)
  • 识别未被引用的附件
  • 支持排除指定分组和存储策略

仪表盘概览

  • 整合存储统计、处理日志、分析数据
  • 快速查看关键指标

配置增强

  • 图片处理并发数配置(1-10)
  • 重复检测并发数配置(1-10)
  • 扫描超时时间配置

🔧 改进

  • 水印字体大小支持自适应模式(按图片尺寸百分比计算)
  • 目标存储策略支持多选
  • 前端重构为多 Tab 面板布局
  • 优化部分日志级别,减少控制台输出

⚠️ 注意事项

  • 需要 Halo 2.22.1 或更高版本
  • 插件更新后需要重启 Halo
  • AVIF 格式需要较新的浏览器支持(Chrome 85+、Firefox 93+、Safari 16+)
  • 瞬间引用跳转需要主题支持瞬间详情页,否则会 404
  • 第三方评论插件的评论内容无法扫描

资源下载

  • plugin-storage-toolkit-0.2.1.jar
0.2.0
TimOxO 发布于

v0.2.0

预发布
>=2.22.1

🎉 新功能

存储统计

  • 按文件类型统计(图片、视频、文档等)
  • 按存储策略统计
  • 按分组统计
  • 可视化图表展示

重复文件检测

  • 基于 MD5 哈希值检测重复文件
  • 显示可节省空间
  • 支持批量删除重复文件
  • 智能推荐保留文件

附件引用扫描

  • 扫描文章、页面内容中的附件引用
  • 扫描封面图、评论、回复
  • 扫描系统设置、插件设置、主题设置
  • 可选扫描瞬间、图库、文档(需在设置中开启)
  • 识别未被引用的附件
  • 支持排除指定分组和存储策略

仪表盘概览

  • 整合存储统计、处理日志、分析数据
  • 快速查看关键指标

配置增强

  • 图片处理并发数配置(1-10)
  • 重复检测并发数配置(1-10)
  • 扫描超时时间配置

🔧 改进

  • 水印字体大小支持自适应模式(按图片尺寸百分比计算)
  • 目标存储策略支持多选
  • 前端重构为多 Tab 面板布局

⚠️ 注意事项

  • 需要 Halo 2.22.1 或更高版本
  • 插件更新后需要重启 Halo
  • 瞬间引用跳转需要主题支持瞬间详情页,否则会 404
  • 第三方评论插件的评论内容无法扫描

Generated from v0.2.0

资源下载

  • plugin-storage-toolkit-0.2.0.jar
0.1.1
Ryan Wang 发布于
>=2.22.1

优化

  • 添加并发限制,最多同时处理 3 张图片,防止内存溢出
  • 提前检查格式/大小/配置,跳过处理时直接流式上传,不读入内存
  • 新增 isAllowedFormat() 方法,根据 MIME 类型判断是否需要处理
  • 简化 getSkipReason(),移除冗余检查
  • maxFileSize 默认值改为 10MB

改进

  • 非允许格式的文件直接流式上传
  • 超过 maxFileSize 的大文件通过 Content-Length 提前拦截
  • 未启用任何处理功能时直接放行

Generate from v0.1.1

资源下载

  • plugin-storage-toolkit-0.1.1.jar