feat(halo): 添加图片自动上传功能

- 新增图片处理工具模块 `src/utils/image.ts`,包含图片引用提取、绝对路径解析和路径替换功能
- 新增图片上传服务 `src/service/image-uploader.ts`,支持调用 Halo 媒体 API 上传图片并实现缓存机制
- 在设置界面添加图片上传开关和上传路径配置项
- 更新发布流程,在提交到 Halo 前自动检测并上传本地图片,替换为远程 URL
- 添加英文、简体中文和繁体中文的国际化文案
- 更新插件版本至 1.1.1 并完善相关配置文件
This commit is contained in:
2026-04-26 16:11:11 +08:00
commit 7d332d3b8c
213 changed files with 128271 additions and 0 deletions
+271
View File
@@ -0,0 +1,271 @@
{
"main": {
"id": "5324373015726ba8",
"type": "split",
"children": [
{
"id": "4509724f8bf84da7",
"type": "tabs",
"children": [
{
"id": "e7a7b303c61786dc",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "博客/Git团队协作指南(精简版).md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Git团队协作指南(精简版)"
}
}
]
}
],
"direction": "vertical"
},
"left": {
"id": "2040fa35d3c780cc",
"type": "split",
"children": [
{
"id": "44f0f6c3e50b6b6b",
"type": "tabs",
"children": [
{
"id": "b87fe94622087e57",
"type": "leaf",
"state": {
"type": "file-explorer",
"state": {
"sortOrder": "alphabetical",
"autoReveal": false
},
"icon": "lucide-folder-closed",
"title": "文件列表"
}
},
{
"id": "fd8c91a5051afb92",
"type": "leaf",
"state": {
"type": "search",
"state": {
"query": "",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical"
},
"icon": "lucide-search",
"title": "搜索"
}
},
{
"id": "281cb4609de43ca5",
"type": "leaf",
"state": {
"type": "bookmarks",
"state": {},
"icon": "lucide-bookmark",
"title": "书签"
}
},
{
"id": "584070af0c010375",
"type": "leaf",
"state": {
"type": "recent-files",
"state": {},
"icon": "clock",
"title": "Recent Files"
}
}
]
}
],
"direction": "horizontal",
"width": 285.5
},
"right": {
"id": "1a950cafdb3ea126",
"type": "split",
"children": [
{
"id": "54723c9a41e32b09",
"type": "tabs",
"children": [
{
"id": "e5ecfd878b991e60",
"type": "leaf",
"state": {
"type": "backlink",
"state": {
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
},
"icon": "links-coming-in",
"title": "反向链接"
}
},
{
"id": "3e52d289a53d24e5",
"type": "leaf",
"state": {
"type": "outgoing-link",
"state": {
"linksCollapsed": false,
"unlinkedCollapsed": true
},
"icon": "links-going-out",
"title": "出链"
}
},
{
"id": "b8e0351a55f515d4",
"type": "leaf",
"state": {
"type": "tag",
"state": {
"sortOrder": "frequency",
"useHierarchy": true,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-tags",
"title": "标签"
}
},
{
"id": "1e67aceb8faf7653",
"type": "leaf",
"state": {
"type": "copilot-chat-view",
"state": {},
"icon": "message-square",
"title": "Copilot"
}
},
{
"id": "a89fbe0ab5883f4c",
"type": "leaf",
"state": {
"type": "outline",
"state": {
"followCursor": true,
"showSearch": true,
"searchQuery": ""
},
"icon": "lucide-list",
"title": "大纲"
}
},
{
"id": "969b17fcb8d1f364",
"type": "leaf",
"state": {
"type": "calendar",
"state": {},
"icon": "calendar-with-checkmark",
"title": "Calendar"
}
},
{
"id": "2a4c1d3c641d5d1d",
"type": "leaf",
"state": {
"type": "git-view",
"state": {},
"icon": "git-pull-request",
"title": "Source Control"
}
}
],
"currentTab": 3
}
],
"direction": "horizontal",
"width": 426.5
},
"left-ribbon": {
"hiddenItems": {
"bases:新建数据库": false,
"switcher:打开快速切换": false,
"graph:查看关系图谱": false,
"canvas:新建白板": false,
"daily-notes:打开/创建今天的日记": false,
"templates:插入模板": false,
"command-palette:打开命令面板": false,
"table-editor-obsidian:Advanced Tables Toolbar": false,
"copilot:Open Copilot Chat": false,
"obsidian-excalidraw-plugin:新建绘图文件": false,
"obsidian-git:Open Git source control": false,
"homepage:Open homepage": false,
"obsidian-importer:Open Importer": false,
"obsidian-kanban:创建新看板": false,
"mermaid-tools:Open Mermaid Toolbar": false,
"omnisearch:Omnisearch": false,
"remotely-save:Remotely Save": false,
"templater-obsidian:Templater": false,
"halo:发布当前文档到 Halo": false
}
},
"active": "e7a7b303c61786dc",
"lastOpenFiles": [
"博客/CLI在AI时代的浴火重生.md",
"博客/Git团队协作指南(精简版).md",
"obsidian-halo/src/service/image-uploader.ts",
"obsidian-halo/src/utils/image.ts",
"博客/check-credentials.ps1",
"博客/get-halo-token.js",
"博客/halo-upload.py",
"obsidian-halo/node_modules/@halo-dev",
"obsidian-halo/node_modules/@rslib",
"obsidian-halo/node_modules/@biomejs",
"obsidian-halo/node_modules/@types",
"obsidian-halo/node_modules",
"obsidian-halo-zip-test/images/pat-zh.png",
"obsidian-halo-zip-test/images/settings-zh.png",
"obsidian-halo-zip-test/images/settings-en.png",
"obsidian-halo-zip-test/images/pat-en.png",
"obsidian-halo-zip-test/images/commands-zh.png",
"obsidian-halo-zip-test/images/commands-en.png",
"obsidian-halo/images/settings-zh.png",
"obsidian-halo/images/settings-en.png",
"obsidian-halo/images/pat-en.png",
"obsidian-halo/images/pat-zh.png",
"copilot/copilot-conversations/分析@20260425_212055.md",
"copilot/copilot-custom-prompts/halo.md",
"Excalidraw/Drawing 2026-04-25 21.16.49.excalidraw.md",
"博客/DeepSeek-V4全面解析.md",
"博客/深入解析 Claude CodeVibe Coding 时代的 AI 编程利器.md",
"2026-04-03.md",
"博客/articles/article-03-ml-learning-path.md",
"博客/articles/article-02-python-efficiency.md",
"博客/articles/article-01-ai-beginner-guide.md",
"博客/视觉语言模型技术综述.md",
"博客/大数据技术栈.md",
"find-skills-0.1.0/SKILL.md",
"小组会议/26.04.04/小组会议.md",
"小组会议/26.03.21 - 副本/小组会议.md",
"小组会议/26.03.21/小组会议.md",
"小组会议/26.02.28/小组会议.md",
"小组会议/25.10.26/小组成员基本信息/小组成员信息/王宇晗.md",
"小组会议/25.10.26/小组成员基本信息/小组成员信息/彭依萍.md",
"小组会议/25.10.26/小组成员基本信息/小组成员信息/赵帅尧.md",
"小组会议/25.10.26/小组成员基本信息/职位安排.md",
"小组会议/25.10.26/小组成员基本信息/小组成员信息/李俊杰.md",
"小组会议/26.02.06/小组会议.md",
"小组会议/26.02.05/小组会议.md",
"小组会议/26.01.28/Gitee团队协作开发完整实操流程.md",
"未命名.canvas"
]
}