<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0"><channel><title>Halo - 强大易用的开源建站工具 | 应用市场 | 图床附件 | 版本发布</title><link>https://www.halo.run</link><atom:link href="https://www.halo.run/feed/app-store/apps/app-tdkrijap/releases.xml" rel="self" type="application/rss+xml"/><description>Halo - 强大易用的开源建站工具 | 应用市场 | 图床附件 | 版本发布</description><generator>Halo v2.27.0</generator><language>zh-cn</language><image><url>https://www.halo.run/upload/logo.png</url><title>Halo - 强大易用的开源建站工具 | 应用市场 | 图床附件 | 版本发布</title><link>https://www.halo.run</link></image><lastBuildDate>Sat, 14 Nov 2026 20:29:48 GMT</lastBuildDate><follow_challenge><feedId>69597013489248256</feedId><userId>41706424548048896</userId></follow_challenge><item><title><![CDATA[图床附件 1.1.1 发布]]></title><link>https://www.halo.run/store/apps/app-tdkrijap/releases/app-release-6ry1p1co</link><description><![CDATA[<img src="https://www.halo.run/plugins/feed/assets/telemetry.gif?title=%E5%9B%BE%E5%BA%8A%E9%99%84%E4%BB%B6%201.1.1%20%E5%8F%91%E5%B8%83&amp;url=/store/apps/app-tdkrijap/releases/app-release-6ry1p1co" width="1" height="1" alt="" style="opacity:0;">
<h2 id="%5Bv1.1.1%5D---2026-09-27" tabindex="-1">[v1.1.1] - 2026-09-27</h2>
<h3 id="%E5%9B%BA%E4%BD%8D%E6%B3%A8%E8%A7%A3%E4%B8%8E%E5%88%A0%E9%99%A4%E5%AE%89%E5%85%A8%EF%BC%88githubattachmenthandler%EF%BC%89" tabindex="-1">固位注解与删除安全（GitHubAttachmentHandler）</h3>
<ul>
 <li>上传时把实际存储位置（仓库、分支、object-key）写入附件元数据固位注解：<code>REPO_ANNO</code> / <code>BRANCH_ANNO</code> / <code>OBJECT_KEY_ANNO</code>，之后不可变。</li>
 <li><code>delete()</code> 改为按固位注解定位删除目标；任一固位信息缺失（旧版附件/策略被修改过）时仅删除 Halo 附件记录、不处理 GitHub 文件（<code>log.warn</code> 后直接返回）。</li>
 <li>删除走 <code>readToken → deleteRemote</code>，远端删除异常仅 <code>doOnError</code> 告警 + <code>onErrorResume(Mono.empty())</code>，不阻塞 Halo 附件删除。</li>
</ul>
<h3 id="%E5%85%AC%E5%BC%80%E9%93%BE%E6%8E%A5%E5%8A%A8%E6%80%81%E5%8C%96%EF%BC%88getpermalink%EF%BC%89" tabindex="-1">公开链接动态化（getPermalink）</h3>
<ul>
 <li>有 <code>OBJECT_KEY_ANNO</code> 时基于 <code>buildPublicUrl(props, objectKey)</code>（当前 customUrl + 固化 objectKey）动态重建；更换自定义域名后存量链接自动更新。</li>
 <li>无固位注解时回退兼容旧版 <code>EXTERNAL_LINK_ANNO_KEY</code>。</li>
</ul>
<h3 id="%E7%AD%96%E7%95%A5%E5%8F%98%E6%9B%B4%E5%91%8A%E8%AD%A6%EF%BC%88policyconfigwatcher%EF%BC%8C%E6%96%B0%E5%A2%9E%EF%BC%89" tabindex="-1">策略变更告警（PolicyConfigWatcher，新增）</h3>
<ul>
 <li>新增 <code>PolicyConfigWatcher</code>（实现 Halo <code>Watcher</code>），监听存储策略配置变更，检测仓库/分支被修改时输出 WARN 告警。</li>
 <li>实现完整生命周期：<code>registerDisposeHook</code> / <code>dispose</code> / <code>isDisposed</code>，插件停用/卸载时显式释放监听，杜绝残留 listener。</li>
</ul>
<h3 id="%E9%9A%90%E7%A7%81%E6%8A%AB%E9%9C%B2" tabindex="-1">隐私披露</h3>
<ul>
 <li><code>plugin-settings.yaml</code> 新增「隐私与数据流向」设置页，内置数据流转披露与隐私承诺。</li>
</ul>
<h2 id="%5Bv1.1.0%5D---2026-09-21" tabindex="-1">[v1.1.0] - 2026-09-21</h2>
<h3 id="%E6%96%87%E4%BB%B6%E5%A4%A7%E5%B0%8F%E9%99%90%E5%88%B6%EF%BC%88%E5%8F%AF%E9%85%8D%E7%BD%AE%EF%BC%89" tabindex="-1">文件大小限制（可配置）</h3>
<ul>
 <li>新增 <code>maxFileSizeMB</code> 配置项（默认 50，取值 1-50），表单 <code>min</code>/<code>max</code> 校验拦截越界。</li>
 <li><code>GithubProperties.maxFileSizeBytes()</code> 做边界收敛，非法值回落默认 50MB。</li>
</ul>
<h3 id="%E6%B5%81%E5%BC%8F%E5%A4%A7%E5%B0%8F%E6%A0%A1%E9%AA%8C%EF%BC%88upload%EF%BC%89" tabindex="-1">流式大小校验（upload）</h3>
<ul>
 <li><code>DataBufferUtils.join</code> + <code>handle</code> 逐缓冲累积字节数，超过配额即 <code>sink.error</code>，不再把整个文件读入内存后再校验。</li>
</ul>
<h3 id="%E8%B6%85%E6%97%B6%E4%B8%8E-token" tabindex="-1">超时与 Token</h3>
<ul>
 <li>统一 <code>REQUEST_TIMEOUT = 30s</code>（连接 15s + 完整请求响应 30s），避免异常请求长期占用线程。</li>
 <li>Token 收敛为 fine-grained（Contents 读写 + 自动只读 Metadata），README/表单同步更新。</li>
</ul>
<h3 id="%E5%85%83%E4%BF%A1%E6%81%AF" tabindex="-1">元信息</h3>
<ul>
 <li>移除插件显示名称后缀；修正仓库地址大小写（<code>Dominic-KK/halo-plugin-picbed</code>）。</li>
</ul>
<h2 id="%5Bv1.0.1%5D---2026-09-21" tabindex="-1">[v1.0.1] - 2026-09-21</h2>
<h3 id="bug-%E4%BF%AE%E5%A4%8D" tabindex="-1">Bug 修复</h3>
<ul>
 <li>修复 <code>Attachment.AttachmentStatus</code> 空指针：上传完成后未初始化 status，粘贴图片时报"请重试"。</li>
 <li>修复上传文件名未按格式重命名：新增格式化文件名方法（接入 <code>FileNameGenerator</code>）。</li>
</ul>
<h3 id="ci" tabindex="-1">CI</h3>
<ul>
 <li>修复 <code>gradlew</code> 可执行权限（100644 -&gt; 100755，<code>git update-index --chmod=+x</code>）。</li>
 <li>调整 CI/CD，跳过 Node 环境搭建（项目无 UI、无 pnpm-lock.yaml）。</li>
</ul>
<h2 id="%5Bv1.0.0%5D---2026-09-20" tabindex="-1">[v1.0.0] - 2026-09-20</h2>
<h3 id="%E6%A0%B8%E5%BF%83%E5%AE%9E%E7%8E%B0" tabindex="-1">核心实现</h3>
<ul>
 <li>基于 Halo <code>AttachmentHandler</code> 扩展点实现 GitHub 图床存储：上传（Contents PUT）、删除（GET sha → DELETE）、<code>getPermalink</code> / <code>getSharedURL</code>。</li>
 <li>支持自定义 API 基地址（国内代理）、仓库分支、路径前缀、自定义访问域名。</li>
 <li>Token 存 Halo <strong>Secret</strong>，经 <code>ReactiveExtensionClient</code> 读取，绝不落地 ConfigMap。</li>
</ul>
<h3 id="%E6%96%87%E4%BB%B6%E5%90%8D%E7%94%9F%E6%88%90%EF%BC%88tools%2Ffilenamegenerator%EF%BC%89" tabindex="-1">文件名生成（tools/FileNameGenerator）</h3>
<ul>
 <li>支持占位符 <code>{y}/{m}/{d}{h}{i}</code>、<code>{origin}</code>、<code>{timestamp}</code>、<code>{rand:N}</code>，兼容 PicGo 命名。</li>
</ul>
<h3 id="%E5%B9%B6%E5%8F%91%E5%86%99%E5%AE%89%E5%85%A8" tabindex="-1">并发写安全</h3>
<ul>
 <li>按「仓库+分支」<code>ReentrantLock</code> 串行化上传/删除，规避 GitHub 并发写分支的 ref 竞态。</li>
 <li>上传 409 冲突重试（最多 4 次），重新生成 objectKey 后重放。</li>
</ul>
<h3 id="%E6%9E%84%E5%BB%BA%E4%B8%8E%E5%8F%91%E5%B8%83" tabindex="-1">构建与发布</h3>
<ul>
 <li>归档名 <code>halo-plugin-picbed</code>；新增 <code>.github/workflows/release.yml</code>，tag 推送自动构建并发布 JAR。</li>
</ul>
<hr>
<p><a href="https://www.halo.run/store/apps/app-tdkrijap/releases/app-release-6ry1p1co">查看版本详情</a></p>]]></description><guid isPermaLink="false">store.halo.run/Release/app-release-6ry1p1co</guid><pubDate>Wed, 30 Sep 2026 08:40:17 GMT</pubDate></item></channel></rss>