Skip to content

Repository files navigation

Markdown Image Host

Markdown Image Host 是一个面向 IntelliJ IDEA Markdown 写作的通用图床插件。打开 .md.markdown 文件,复制图片并在光标处粘贴,插件会把图片从本机直接上传到你配置的对象存储,再插入标准 Markdown 图片链接:

![](https://your-public-domain.example/md-images/2026/08/03/image-uuid.png)

插件没有作者运营的中转服务器。上传链路是 IDEA → 你选择的对象存储;Access Key ID 和 Secret Access Key 由 IntelliJ IDEA Password Safe 保管,不写入项目文件、Markdown 文件或插件仓库。

适用场景

  • 在 IDEA 内写技术文档、博客、README 或知识库,不想先把图片保存到项目目录。
  • 已经有华为云 OBS、AWS S3、MinIO 或 Cloudflare R2,希望沿用自己的存储和域名。
  • 希望图片上传、对象命名和 Markdown 回填都在本机完成,不依赖第三方图床账号。

已支持的存储

提供商 连接方式 公开访问方式
华为云 OBS OBS 原生 SDK 勾选“上传对象公开读”,或填写 CDN / 自定义域名
S3 兼容存储(AWS S3、MinIO 等) S3 API 勾选“上传对象公开读”,或填写 CDN / 自定义域名
Cloudflare R2 S3 API 填写 r2.dev 或自定义公开域名;R2 不使用对象 ACL

快速开始

安装开发版 ZIP

  1. 构建插件:./gradlew buildPlugin
  2. 在 IDEA 中选择 Settings | Plugins | ⚙ | Install Plugin from Disk...
  3. 选择 build/distributions/ 下生成的插件 ZIP,安装后重启 IDEA。

配置图床

  1. 打开 Settings | Tools | Markdown Image Host
  2. 选择存储提供商,填写 Endpoint、Bucket、对象前缀、Access Key ID 和 Secret Access Key。
  3. 填写能被 Markdown 阅读器访问的公开访问域名。可以是 CDN、自定义域名,或厂商提供的公开域名。
  4. 点击 Apply 保存配置,再点击 测试图床上传。测试对象会写入 <对象前缀>/_tests/,不会修改当前 Markdown 文件。

日常使用

  1. .md / .markdown 编辑器中把光标放到目标位置。
  2. 将图片复制到系统剪贴板后直接按 IDEA 的粘贴快捷键(macOS:⌘V,Windows/Linux:Ctrl+V)。
  3. 插件在后台上传 PNG;成功后在原光标位置插入 ![](https://...),失败时只显示本地通知,不插入失效链接。

插件只接管“Markdown 文件 + 剪贴板中存在图片”的粘贴动作;普通文本粘贴、非 Markdown 文件和未完成配置不会被拦截。

Cloudflare R2 使用 https://<ACCOUNT_ID>.r2.cloudflarestorage.com 作为 Endpoint、auto 作为 Region,并勾选 Path-style S3 地址;同时必须在 R2 Bucket 侧开启公开访问并配置公开域名。R2 不使用对象 ACL,插件不会尝试发送 public-read ACL。

配置示例(占位值)

以下仅用于说明字段含义,不是可用凭据:

Provider:       Cloudflare R2
Endpoint:       https://<ACCOUNT_ID>.r2.cloudflarestorage.com
Region:         auto
Bucket:         <YOUR_BUCKET>
Object prefix:  md-images
Public domain:  https://img.example.com
Access Key ID:  <R2_ACCESS_KEY_ID>
Secret Access:  <R2_SECRET_ACCESS_KEY>
Path-style:     enabled

工作原理

IDEA Markdown 图片粘贴
        │
        ▼
MarkdownImageHostPasteProvider(识别 Markdown + 图片剪贴板)
        │
        ▼
ImageHostService(对象命名、Password Safe 凭据读取、上传入口)
        │
        ├── HuaweiObsImageHostProvider(OBS 原生 SDK)
        └── S3CompatibleImageHostProvider(AWS S3 / MinIO / Cloudflare R2)
        │
        ├── 上传成功:公开 URL → 回填 Markdown 图片链接
        └── 上传失败:本地 IDEA 通知,不修改文档

Markdown 层只依赖“本地文件上传后返回 URL”这一接口;新增图床时只需实现 ImageHostProvider,不会影响粘贴、设置页或 Markdown 回填逻辑。

隐私与安全边界

  • 图片只发送到用户在设置页选择的对象存储;插件不提供图片中转、代理、账号系统或遥测服务。
  • Access Key ID 和 Secret Access Key 存在 IDEA Password Safe。不要把密钥写进 README、.env、Gradle 文件、截图或 Issue。
  • 插件会在本地创建临时 PNG,上传完成或失败后删除临时文件。
  • “上传对象公开读”会让知道 URL 的人读取图片。生产环境建议使用最小权限凭据、独立 Bucket 和 CDN/自定义域名,并按存储厂商策略配置公开访问。
  • R2 的公开访问由 Bucket 域名策略控制,不要把 S3 Endpoint 当作 Markdown 图片域名。

当前边界与后续计划

  • 仅处理系统剪贴板图片,统一编码为 PNG。
  • 上传失败不插入链接。
  • 当前不支持图片压缩、图片管理、多账号、签名 URL、断点续传、拖拽上传和批量上传。
  • 当前对象名按 UTC 日期分区并追加 UUID,适合长期引用但不提供去重或删除管理。
  • 未来可评估图片压缩、上传前预览、失败重试、批量粘贴、多配置切换和对象清理工具。

开发与验证

./gradlew clean test
./gradlew verifyPlugin
./gradlew verifyPluginStructure
./gradlew buildPlugin

构建产物位于 build/distributions/。仓库不应提交 build/、IDE 配置、Password Safe 导出文件或任何真实云存储凭据。

反馈

请在 GitHub Issues 提供 IDEA 版本、插件版本、存储提供商和脱敏后的错误信息。不要在 Issue 中粘贴 Access Key、Secret Access Key、Bucket 私有链接或业务图片。

About

Generic Markdown image-host plugin for IntelliJ IDEA

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages