Skip to content

Commit 6c2a8be

Browse files
committed
gpt_add: obsidian control plugin
1 parent 857f2e0 commit 6c2a8be

968 files changed

Lines changed: 646697 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

plugin/obsidian/README.md

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
# mkBlog Obsidian Uploader
2+
3+
将 Obsidian Vault 中的 Markdown 与同名图片文件夹一起上传到 mkBlog 后端,并在侧边栏展示文章列表,支持删除远端文章。
4+
5+
## 功能
6+
7+
- 解析 Markdown 头部元数据(Frontmatter)中的 `author` / `category`
8+
- 单独上传当前 Markdown 文件(并自动上传同名图片文件夹中的图片)。
9+
- 单独上传指定文件夹中的所有 Markdown(并自动上传各自同名图片文件夹中的图片)。
10+
- 激活后自动拉取文章列表,在侧边栏管理视图中展示。
11+
- 支持在管理视图中删除远端文章。
12+
13+
---
14+
15+
## 安装(开发态)
16+
17+
1. 将本插件目录放到你的 Vault 插件目录下,例如:
18+
19+
```mkBlog/plugin/obsidian/README.md#L1-4
20+
<Vault>/.obsidian/plugins/mkblog-obsidian/
21+
├─ manifest.json
22+
├─ main.js
23+
└─ styles.css (可选)
24+
```
25+
26+
2. 在 Obsidian 中打开:`设置 -> 第三方插件`
27+
3. 关闭安全模式(如尚未关闭)
28+
4. 在已安装插件中启用 `mkBlog Obsidian Uploader`
29+
30+
> 如果你使用 TypeScript 源码开发,请先构建生成 `main.js` 再启用插件。
31+
32+
---
33+
34+
## 配置项
35+
36+
在插件设置页中可配置:
37+
38+
- `Base URL`
39+
- 后端服务基础地址,例如:`http://localhost:8080`
40+
- 插件会自动拼接接口路径:
41+
- `/api/allarticles`
42+
- `/api/article/:title`
43+
- `/api/image`
44+
- `Default Author`
45+
- 当 Markdown 未声明作者时使用
46+
- `Default Category`
47+
- 当 Markdown 未声明分类时使用
48+
- `Auth Token`(可选)
49+
- 若填写,会通过请求头发送:
50+
- `Authorization: Bearer <token>`
51+
52+
---
53+
54+
## Markdown 元数据解析规则
55+
56+
插件会优先读取文档开头的 Frontmatter:
57+
58+
```mkBlog/plugin/obsidian/README.md#L1-7
59+
---
60+
author: mkitsdts
61+
category: language
62+
---
63+
# 标题
64+
正文...
65+
```
66+
67+
解析行为:
68+
69+
1. 若存在 `author` / `category`,优先使用。
70+
2. 若缺失,则回退到插件设置中的默认值。
71+
3. 上传正文时会去掉 Frontmatter,仅上传正文内容。
72+
73+
---
74+
75+
## 图片匹配规则
76+
77+
对于 `post.md`
78+
79+
- 插件会查找同目录下同名文件夹 `post/`
80+
- 读取其中图片并上传(支持常见格式:`.png .jpg .jpeg .gif .webp .svg`
81+
82+
示例结构:
83+
84+
```mkBlog/plugin/obsidian/README.md#L1-6
85+
Notes/
86+
├─ post.md
87+
└─ post/
88+
├─ 1.png
89+
└─ cover.jpg
90+
```
91+
92+
---
93+
94+
## 命令
95+
96+
插件提供以下命令(可在命令面板执行):
97+
98+
- `mkBlog: 上传当前文件为博客`
99+
- `mkBlog: 上传选择文件夹为博客`
100+
- `mkBlog: 刷新文章列表`
101+
- `mkBlog: 删除文章`
102+
103+
---
104+
105+
## 典型工作流
106+
107+
1. 在 Vault 中编写 `xxx.md`
108+
2. (可选)在文档头部写 `author` / `category`
109+
3. 将引用图片放在同名文件夹 `xxx/`
110+
4. 执行 `mkBlog: 上传当前文件为博客`
111+
5. 在侧边栏确认文章列表是否刷新成功
112+
113+
---
114+
115+
## 后端接口约定
116+
117+
### 1) 拉取文章列表
118+
119+
- `GET /api/allarticles`
120+
- 兼容返回结构:
121+
- `[...]`
122+
- `{ articles: [...] }`
123+
- `{ data: [...] }`
124+
- `{ data: { articles: [...] } }`
125+
- `{ items: [...] }`
126+
- `{ list: [...] }`
127+
128+
### 2) 上传文章
129+
130+
- `PUT /api/article/:title`
131+
- JSON Body 示例:
132+
133+
```mkBlog/plugin/obsidian/README.md#L1-8
134+
{
135+
"title": "post",
136+
"author": "mkitsdts",
137+
"category": "language",
138+
"update_at": "2026-01-01 12:34:56",
139+
"content": "正文内容..."
140+
}
141+
```
142+
143+
### 3) 上传图片
144+
145+
- `PUT /api/image`
146+
- JSON Body 示例:
147+
148+
```mkBlog/plugin/obsidian/README.md#L1-6
149+
{
150+
"title": "post",
151+
"name": "cover.png",
152+
"data": "<base64>"
153+
}
154+
```
155+
156+
### 4) 删除文章
157+
158+
- `DELETE /api/article/:title`
159+
160+
---
161+
162+
## 注意事项
163+
164+
- `Base URL` 不能为空,否则上传/刷新/删除会失败。
165+
- 文档标题默认使用文件名(不含 `.md`)。
166+
- 文件夹批量上传会递归扫描子目录中的 `.md` 文件。
167+
- 单篇文章上传失败时会给出错误信息;图片上传失败会提示具体文件名,便于重试。
168+
169+
---
170+
171+
## 故障排查
172+
173+
1. **看不到文章列表**
174+
- 检查 `Base URL` 是否可访问
175+
- 检查后端接口是否已启动
176+
2. **上传成功但图片缺失**
177+
- 确认图片位于“同名文件夹”中
178+
- 确认图片扩展名在支持列表内
179+
3. **删除失败**
180+
- 检查标题是否与后端记录一致(URL 编码由插件处理)
181+
- 检查认证 Token 是否有效
182+
183+
---
184+
185+
## 版本建议
186+
187+
- Obsidian:建议使用较新桌面版本(支持社区插件 API)
188+
- Node.js(开发态):建议 `>=18`
189+
- TypeScript(开发态):建议与 Obsidian 官方插件模板保持一致

0 commit comments

Comments
 (0)