feat(halo): 添加图片上传功能并完善发布流程

- 实现图片上传服务,支持检测并上传本地图片到 Halo
- 优化发布流程,添加详细日志和错误处理
- 更新任务清单和检查列表以反映完成状态
- 添加 Halo 博客写作技能文档
This commit is contained in:
2026-04-26 16:47:41 +08:00
parent 7d332d3b8c
commit 8ccc32be0b
13 changed files with 1149 additions and 92 deletions
@@ -0,0 +1,253 @@
# Halo CLI 高级用法
本文件包含 Halo CLI 的高级用法和示例场景。
## 内容目录
1. [批量操作](#批量操作)
2. [自动化脚本](#自动化脚本)
3. [内容迁移](#内容迁移)
4. [SEO 优化](#seo-优化)
---
## 批量操作
### 批量导出文章
```powershell
# 导出所有文章为 JSON
halo post list --page 1 --size 100 --json > all_posts.json
# 批量导出为 Markdown
$posts = halo post list --page 1 --size 100 --json | ConvertFrom-Json
foreach ($post in $posts.items) {
halo post export-markdown $post.name --output "./export/$($post.name).md"
}
```
### 批量更新标签
```powershell
# 给多篇文章添加标签
$posts = halo post list --page 1 --size 20 --json | ConvertFrom-Json
foreach ($post in $posts.items) {
halo post update $post.name --tags "Python,教程,技术分享"
}
```
### 批量发布
```powershell
# 将所有草稿发布
$posts = halo post list --page 1 --size 100 --json | ConvertFrom-Json
foreach ($post in $posts.items) {
if ($post.status -eq "draft") {
halo post update $post.name --publish true
Write-Host "已发布: $($post.title)"
}
}
```
---
## 自动化脚本
### 文章备份脚本
```powershell
# backup-halo-posts.ps1
param(
[int]$PageSize = 50
)
$backupDir = ".\halo-backup\$(Get-Date -Format 'yyyy-MM-dd')"
New-Item -ItemType Directory -Path $backupDir -Force | Out-Null
$page = 1
$totalExported = 0
do {
Write-Host "正在导出第 $page 页..."
$result = halo post list --page $page --size $PageSize --json | ConvertFrom-Json
foreach ($post in $result.items) {
$filename = "$backupDir\$($post.name).md"
halo post export-markdown $post.name --output $filename
$totalExported++
}
$page++
} while ($result.hasNext)
Write-Host "备份完成!共导出 $totalExported 篇文章到 $backupDir"
```
### 定时发布脚本
```powershell
# scheduled-publish.ps1
param(
[string]$FilePath
)
if (-not (Test-Path $FilePath)) {
Write-Error "文件不存在: $FilePath"
exit 1
}
$content = Get-Content $FilePath -Raw
$title = [System.IO.Path]::GetFileNameWithoutExtension($FilePath)
Write-Host "正在发布: $title"
halo post create --title $title --content $content --publish true
if ($LASTEXITCODE -eq 0) {
Write-Host "发布成功!"
} else {
Write-Error "发布失败"
exit 1
}
```
---
## 内容迁移
### 从其他平台导入
```powershell
# 从 WordPress 导出文件导入
halo post import-markdown --file .\wordpress-export\post-1.md
halo post import-markdown --file .\wordpress-export\post-2.md
# 批量导入
Get-ChildItem .\wordpress-export\*.md | ForEach-Object {
halo post import-markdown --file $_.FullName
Write-Host "已导入: $($_.Name)"
}
```
### 迁移到其他平台
```powershell
# 导出为标准格式
halo post list --page 1 --size 100 --json > migration.json
# 转换为其他 CMS 格式(如 Hugo、Jekyll
# 需要额外的转换脚本处理 JSON 到目标格式
```
---
## SEO 优化
### 检查文章 SEO
```powershell
# 获取最近 10 篇文章的 SEO 信息
$posts = halo post list --page 1 --size 10 --json | ConvertFrom-Json
foreach ($post in $posts.items) {
$detail = halo post get $post.name --json | ConvertFrom-Json
Write-Host "文章: $($detail.title)"
Write-Host " - 字数: $($detail.wordCount)"
Write-Host " - 标签: $($detail.tags -join ', ')"
Write-Host " - URL: $($detail.slug)"
Write-Host ""
}
```
### 批量更新 SEO 描述
```powershell
# 为所有文章添加 SEO 描述
$posts = halo post list --page 1 --size 50 --json | ConvertFrom-Json
foreach ($post in $posts.items) {
$detail = halo post get $post.name --json | ConvertFrom-Json
# 生成描述(前 160 个字符)
$excerpt = $detail.content -replace '<[^>]+>', '' # 去除 HTML 标签
$excerpt = $excerpt.Substring(0, [Math]::Min(160, $excerpt.Length))
halo post update $post.name --description $excerpt
}
```
---
## 高级配置
### 使用不同 Profile
```powershell
# 列出所有配置
halo auth profile list
# 使用指定配置
halo post list --profile production
# 创建新配置
halo auth login --profile aliyun --url http://101.133.128.193:8091 --auth-type bearer --token <token>
```
### 环境变量配置
```powershell
# 临时修改配置目录
$env:HALO_CLI_CONFIG_DIR = "d:\halo-config"
# 使用代理
$env:HTTPS_PROXY = "http://proxy:8080"
# 禁用 SSL 验证(不推荐)
$env:HALO_CLI_INSECURE_SSL = "true"
```
### 调试模式
```powershell
# 显示详细输出
halo post list --page 1 --size 20 --verbose
# 查看配置
halo auth current --verbose
# 查看请求/响应
halo post get <id> --debug
```
---
## 常见问题解决
### Token 过期
```powershell
# 刷新 Token
halo auth login --profile local --url http://192.168.5.8:8091 --auth-type bearer --token <new-token>
```
### 网络问题
```powershell
# 使用超时设置
halo post list --timeout 30
# 重试机制
$maxRetries = 3
for ($i = 1; $i -le $maxRetries; $i++) {
halo post list --page 1 --size 20
if ($LASTEXITCODE -eq 0) { break }
Start-Sleep -Seconds 5
}
```
### 并发限制
Halo API 有请求限制,高并发操作可能导致失败。建议:
- 使用 `--rate-limit 10`(如果支持)
- 添加延迟:`Start-Sleep -Milliseconds 100`
- 批量操作使用 `--batch` 标志(如果支持)
@@ -0,0 +1,485 @@
# Halo CLI 命令参考
完整命令列表和详细用法。
## 认证相关(auth
```powershell
# 查看当前认证状态
halo auth current
# 列出所有配置
halo auth profile list
# 登录(Bearer Token
halo auth login --profile local --url http://192.168.5.8:8090 --auth-type bearer --token <token>
# 登录(Basic Auth
halo auth login --profile local --url http://192.168.5.8:8090 --auth-type basic --username admin --password <password>
# 移除配置
halo auth remove local
# 切换默认配置
halo auth default production
```
## 文章管理(post
### 列出文章
```powershell
# 基本列表
halo post list
# 分页
halo post list --page 1 --size 20
# JSON 格式(便于脚本处理)
halo post list --page 1 --size 20 --json
# 按状态筛选
halo post list --status published
halo post list --status draft
```
### 获取文章
```powershell
# 查看文章详情
halo post get 019dbabc-86b9-74a0-a926-c25529309007
# JSON 格式
halo post get 019dbabc-86b9-74a0-a926-c25529309007 --json
```
### 创建文章
```powershell
# 基本创建(草稿)
halo post create --title "我的第一篇文章" --content "# 标题\n\n内容..."
# 创建并发布
halo post create --title "我的第一篇文章" --content "# 标题" --publish true
# 使用 HTML 格式
halo post create --title "HTML 文章" --content "<h1>标题</h1><p>内容</p>" --raw-type html
# 指定分类
halo post create --title "文章" --content "内容" --category "技术"
# 指定标签
halo post create --title "文章" --content "内容" --tags "Python,教程"
```
### 更新文章
```powershell
# 更新标题
halo post update 019dbabc-86b9-74a0-a926-c25529309007 --title "新标题"
# 更新内容
halo post update 019dbabc-86b9-74a0-a926-c25529309007 --content "# 新内容"
# 同时更新标题和内容
halo post update 019dbabc-86b9-74a0-a926-c25529309007 --title "新标题" --content "新内容"
# 更新标签
halo post update 019dbabc-86b9-74a0-a926-c25529309007 --tags "新标签1,新标签2"
# 发布草稿
halo post update 019dbabc-86b9-74a0-a926-c25529309007 --publish true
# 取消发布
halo post update 019dbabc-86b9-74a0-a926-c25529309007 --unpublish
```
### 删除文章
```powershell
# 删除文章(会提示确认)
halo post delete 019dbabc-86b9-74a0-a926-c25529309007
# 强制删除(跳过确认)
halo post delete 019dbabc-86b9-74a0-a926-c25529309007 --force
```
### 导出文章
```powershell
# 导出为 JSON
halo post export-json 019dbabc-86b9-74a0-a926-c25529309007
# 导出到指定文件
halo post export-json 019dbabc-86b9-74a0-a926-c25529309007 --output ./backup/post.json
# 导出为 Markdown
halo post export-markdown 019dbabc-86b9-74a0-a926-c25529309007
# 导出到指定文件
halo post export-markdown 019dbabc-86b9-74a0-a926-c25529309007 --output ./backup/post.md
```
### 导入文章
```powershell
# 从 JSON 文件导入
halo post import-json --file ./backup/post.json
# 从 JSON 字符串导入
halo post import-json --raw '{"post": {...}, "content": "..."}'
# 从 Markdown 文件导入
halo post import-markdown --file ./backup/post.md
# 导入并发布
halo post import-markdown --file ./post.md --publish true
```
### 文章标签管理
```powershell
# 列出所有标签
halo post tag list
# 创建标签
halo post tag create --name "Python" --slug "python" --color "#3776AB"
# 更新标签名称
halo post tag update python --name "Python编程"
# 更新标签颜色
halo post tag update python --color "#3776AB"
# 删除标签
halo post tag delete python
# 查看标签下的文章数量
halo post tag list --verbose
```
### 文章分类管理
```powershell
# 列出所有分类
halo post category list
# 创建分类
halo post category create --name "技术" --slug "tech" --priority 10
# 更新分类
halo post category update tech --name "技术分享" --priority 5
# 删除分类
halo post category delete tech
# 设置分类优先级(数字越大排序越靠前)
halo post category update tech --priority 10
```
### 为文章设置标签和分类
```powershell
# 创建文章时设置标签
halo post create --title "标题" --content "内容" --tags "Python,教程"
# 创建文章时设置分类
halo post create --title "标题" --content "内容" --category "技术"
# 同时设置标签和分类
halo post create --title "标题" --content "内容" --tags "AI,教程" --category "技术"
# 更新文章的标签
halo post update <id> --tags "新标签1,新标签2"
# 更新文章的分类
halo post update <id> --category "技术分享"
# 清除文章的标签
halo post update <id> --tags ""
# 清除文章的分类
halo post update <id> --category ""
```
### 查询文章标签和分类
```powershell
# 查看某篇文章的标签(JSON 格式)
halo post get <id> --json | Select-String -Pattern "tags"
# 列出所有带有特定标签的文章
halo post list --page 1 --size 100 --json | ConvertFrom-Json | Where-Object {
$_.spec.tags -contains "AI智能体"
}
# 列出所有带有特定分类的文章
halo post list --page 1 --size 100 --json | ConvertFrom-Json | Where-Object {
$_.spec.categories -contains "技术深潜"
}
```
### 批量修改标签
```powershell
# 为所有无标签的文章添加标签
$posts = halo post list --page 1 --size 100 --json | ConvertFrom-Json
foreach ($post in $posts.items) {
if ($post.spec.tags.Count -eq 0) {
halo post update $post.name --tags "技术深潜"
Write-Host "已为 '$($post.spec.title)' 添加标签"
}
}
# 将所有文章从"旧标签"迁移到"新标签"
$posts = halo post list --page 1 --size 100 --json | ConvertFrom-Json
foreach ($post in $posts.items) {
if ($post.spec.tags -contains "旧标签") {
$newTags = $post.spec.tags -replace "旧标签", "新标签"
halo post update $post.name --tags ($newTags -join ",")
}
}
```
### 博客现有标签参考
| 显示名称 | Slug | 颜色 |
|---------|------|------|
| 协会动态 | xie-hui-dong-tai | #B8E986 |
| 5分钟速览 | 5fen-zhong-su-lan | #50E3C2 |
| 技术深潜 | ji-shu-shen-qian | #4A90E2 |
| 校园AI | xiao-yuan-ai | #9013FE |
| 竞赛指南 | jing-sai-zhi-nan | #BD10E0 |
| 项目实战 | xiang-mu-shi-zhan | #417505 |
| 零基础入门 | ling-ji-chu-ru-men | #7ED321 |
| 开源框架 | kai-yuan-kuang-jia | #8B572A |
| 模型轻量化 | mo-xing-qing-liang-hua | #F8E71C |
| 隐私计算 | yin-si-ji-suan | #F5A623 |
| AI智能体 | aizhi-neng-ti | #D0021B |
### 博客现有分类参考
| 显示名称 | Slug |
|---------|------|
| 行业望远镜 | xing-ye-wang-yuan-jing |
| 协会进行时 | xie-hui-jin-xing-shi |
| 校园AI日记 | xiao-yuan-airi-ji |
| 竞赛能量站 | jing-sai-neng-liang-zhan |
| 成长实验室 | cheng-chang-shi-yan-shi |
| 智能体前沿 | zhi-neng-ti-qian-yan |
| 默认分类 | default |
## 单页管理(single-page
```powershell
# 列出单页
halo single-page list
# 查看单页
halo single-page get <name>
# 创建单页
halo single-page create --title "关于我们" --content "公司介绍..."
# 更新单页
halo single-page update about --title "关于我们" --content "新内容"
# 删除单页
halo single-page delete about --force
# 导出/导入
halo single-page export-markdown <name> --output ./page.md
halo single-page import-markdown --file ./page.md
```
## 搜索内容(search
```powershell
# 搜索公开文章
halo search "Python 教程"
# 搜索并限制结果
halo search "教程" --limit 10
# 搜索并显示详细信息
halo search "教程" --json
```
## 插件管理(plugin
```powershell
# 列出插件
halo plugin list
# 获取插件详情
halo plugin get <plugin-name>
# 升级插件
halo plugin upgrade <plugin-name>
# 升级所有插件
halo plugin upgrade --all
# 启用/禁用插件
halo plugin enable <plugin-name>
halo plugin disable <plugin-name>
```
## 主题管理(theme
```powershell
# 列出主题
halo theme list
# 获取主题详情
halo theme get <theme-name>
# 升级主题
halo theme upgrade <theme-name>
# 切换主题
halo theme active <theme-name>
```
## 附件管理(attachment
```powershell
# 列出附件
halo attachment list
# 上传附件
halo attachment upload --file ./image.png
# 删除附件
halo attachment delete <attachment-id>
```
## 备份管理(backup
```powershell
# 列出备份
halo backup list
# 创建备份
halo backup create
# 下载备份
halo backup download <backup-id> --output ./backup.zip
# 删除备份
halo backup delete <backup-id>
```
## 动态管理(moment
```powershell
# 列出动态
halo moment list
# 创建动态
halo moment create --content "今天写了两篇博客!"
# 删除动态
halo moment delete <moment-id>
```
## 评论管理(comment
```powershell
# 列出评论
halo comment list
# 列出未审核评论
halo comment list --status pending
# 回复评论
halo comment reply <comment-id> --content "感谢您的评论!"
# 审核评论
halo comment approve <comment-id>
halo comment reject <comment-id>
# 删除评论
halo comment delete <comment-id>
```
## 通知管理(notification
```powershell
# 列出通知
halo notification list
# 标记已读
halo notification mark-read <notification-id>
# 全部标记已读
halo notification mark-all-read
# 删除通知
halo notification delete <notification-id>
```
## Shell 补全
```powershell
# bash
eval "$(halo completion bash)"
# zsh
eval "$(halo completion zsh)"
# PowerShell(自动添加到配置文件)
halo completion powershell >> $PROFILE
```
## 输出格式
### 普通输出
```powershell
# 表格格式(默认)
halo post list
# JSON 格式
halo post list --json
# YAML 格式
halo post list --yaml
```
### 颜色输出
```powershell
# 彩色输出(默认)
halo post list --color
# 禁用颜色
halo post list --no-color
```
## 超时和重试
```powershell
# 设置超时(秒)
halo post list --timeout 60
# 重试次数
halo post list --retry 3
```
## 调试
```powershell
# 显示调试信息
halo --debug post list
# 显示完整错误
halo post create --title "Test" --content "Content" --verbose
# 查看版本
halo --version
# 查看帮助
halo --help
halo post --help
```