FIT2CLOUD
初春图床 的图标

初春图床

175
9

集成初春图床(oneimg)作为 Halo 附件存储后端,支持将图片上传到自部署的初春图床服务

初春图床 Halo 插件

初春图床(oneimg)集成到 Halo 2.x,支持附件上传与一键同步。

本插件使用 DeepSeek v4 Pro 辅助开发。

关于初春图床

初春图床 是一个基于 Go + Vue 3 的现代化图床管理系统,支持本地/S3/WebDAV/FTP 等多种存储后端,上传图片自动转 WebP,提供 POW 安全验证、剪贴板粘贴上传、数据仪表板等功能,可通过 Docker Compose 一键部署。

功能

  • 附件上传 — Halo 中上传的图片自动存储到初春图床
  • 附件删除 — Halo 中删除附件不联动图床,仅删除 Halo 侧记录
  • 一键同步清理 — 将初春图床中已有图片批量导入 Halo 附件库,实时显示日志,自动跳过已存在图片;同步完成后自动反向清理:对 Halo 中属于初春图床策略的附件,若对应图片在图床中已不存在,则自动删除 Halo 侧的附件记录

2026-07-10_12-49-27

TODO

(暂无待办项)

前置条件

  • 已部署初春图床服务
  • 在初春图床后台「系统设置 → API Token」生成并启用 Token
  • Halo >= 2.25.0

安装

应用市场安装

Halo 应用市场搜索本插件名即可安装。

手动安装

  1. Releases 下载最新 JAR
  2. Halo 后台「插件管理 → 上传插件」安装

配置

1. 存储策略

Halo 后台「附件 → 存储策略 → 新增」选择「初春图床」:

配置项 说明 必填
API 地址 初春图床部署地址,务必使用 HTTPS
API Token 后台生成的 Token
存储桶 ID 目标存储桶,默认 1
标签 ID 上传时自动添加的标签(可选) -

2. 同步已有图片

插件设置「同步」标签页中点击「开始同步」,将初春图床中所有图片批量导入 Halo 附件库。已存在的图片自动跳过,日志实时滚动显示。

开发

环境

  • JDK 21
  • Gradle 8.x
  • pnpm

构建

# 前端(如修改了 ui/ 目录)
cd ui && pnpm install && pnpm build
cp dist/main.js dist/style.css ../src/main/resources/console/

# 后端
./gradlew build

# 产物位于 build/libs/plugin-oneimg-X.X.X.jar

目录结构

├── ui/                          # Vue 3 前端(同步标签页)
│   ├── src/
│   │   ├── index.ts             # 插件入口,注册扩展点
│   │   └── SyncView.vue         # 同步 UI 组件
│   └── vite.config.ts           # IIFE 构建配置
├── src/main/java/io/github/alonenannan/oneimg/
│   ├── OneImgPlugin.java        # 插件生命周期
│   ├── OneImgAttachmentHandler.java  # 上传/删除附件
│   ├── OneImgSyncEndpoint.java  # 同步 REST API
│   └── OneImgUtils.java         # 配置校验等工具方法
└── src/main/resources/
    ├── plugin.yaml              # 插件元数据
    ├── console/                 # 前端构建产物
    └── extensions/
        ├── policy-template.yaml # 存储策略表单
        └── settings.yaml        # 插件设置

技术架构

  • 基于 Halo Plugin Framework,实现 AttachmentHandler 扩展点
  • 上传使用 Spring WebClient 调用初春图床 API(响应式非阻塞)
  • 同步使用 java.net.http.HttpClient,异步执行 + 前端轮询实时日志,完成后自动反向清理失效附件;API 基于 Spring Security 做登录鉴权
  • 前端 Vue 3 + Vite,通过 plugin:self:tabs:create 扩展点注册标签页

许可证

GPL-3.0


讨论(0)

这是一个开源应用,我们推荐优先在开源仓库中提交 issue,以便开发者更好地接收和跟进问题。

去提交 issue