本文摘要背景这个博客之前发文章有个麻烦事——配图得自己上传到图床、复制链接、再贴到 Markdown 里。虽然流程不算复杂,但每篇文章都要来一遍,写多了也烦。趁着今天有空,把 AI 写博客的流程升级了一下:让它发文章时,把图片自动上传到图床、自动嵌入链接。写博客一条龙,舒服。准备工作对接其实分两步:图床 API 打通 + 脚本封装。图床用的是自建的"映舍"图床,后端 Java Spring Boot,有现...

背景
这个博客之前发文章有个麻烦事——配图得自己上传到图床、复制链接、再贴到 Markdown 里。虽然流程不算复杂,但每篇文章都要来一遍,写多了也烦。
趁着今天有空,把 AI 写博客的流程升级了一下:让它发文章时,把图片自动上传到图床、自动嵌入链接。写博客一条龙,舒服。
准备工作
对接其实分两步:图床 API 打通 + 脚本封装。
图床
用的是自建的"映舍"图床,后端 Java Spring Boot,有现成的上传接口:
POST /api/v3/upload
Authorization: Bearer <token>
Content-Type: multipart/form-data
参数: file(图片文件)、params(json 字符串,可选)在后台生成一个 sk- 开头的 API Token 即可调用。
思路
发文章时原本只需要执行 typecho-cli submit,现在在上一步加个图片上传环节:
- 检查正文中是否有本地图片或需要配图
- 调用图床 API 上传,返回公开 URL
- 把 URL 替换到正文的 Markdown 中
- 最后用
typecho-cli submit提交
实现
写了一个图床 CLI 工具 image-hosting-cli,封装了 multipart 上传逻辑。
上传脚本
核心代码不复杂,就是构造 multipart/form-data 请求体,带文件字段和 params 参数(控制去重、水印、压缩、相册等):
def build_multipart_form(fields, files):
boundary = "----" + uuid.uuid4().hex
body = b""
for key, value in fields.items():
body += f"--{boundary}\r\nContent-Disposition: form-data; name=\"{key}\"\r\n\r\n{value}\r\n".encode()
for key, (filepath, content_type) in files.items():
filename = os.path.basename(filepath)
with open(filepath, "rb") as f:
file_data = f.read()
body += f"--{boundary}\r\nContent-Disposition: form-data; name=\"{key}\"; filename=\"{filename}\"\r\n"
body += f"Content-Type: {content_type}\r\n\r\n".encode()
body += file_data + b"\r\n"
body += f"--{boundary}--\r\n".encode()
return body, boundary用的时候一行搞定:
image-hosting-cli upload 截图.png
# → 返回 {"url": "https://s3.cndoor.vip/zpic-images/2026/07/30/xxx.jpg"}配置
图床域名和 Token 跟博客配置放同一个文件:
{
"domain": "https://blog.cndoor.vip",
"token": "AaTP...",
"image_hosting_domain": "https://img.cndoor.vip",
"image_hosting_token": "sk-...",
"image_hosting_album_id": 1
}album_id=1 是专门放博客配图的相册,方便管理。
效果
现在发文章的流程变成了:
写正文 → 检查配图 → image-hosting-cli upload → 嵌入 URL → typecho-cli submit全部自动化,我只需要说一句"发博客",剩下的 AI 搞定。
总结
图床和博客对接并不复杂,关键在于:
- 图床要有公开的 API——自建图床的话,后端框架基本都支持,Spring Boot、Go、Node 都有现成的文件上传处理
- CLI 封装——不依赖 curl,Python 原生就能搞定 multipart 上传,脚本可复用
- 配置统一——博客 Token 和图床 Token 放同一份配置文件,方便管理
这次升级后,写博客的效率又高了一截。下次再遇到类似的"就差一步"的流程,思路也是一样的:看有没有 API,有就打通,没有就写一个。
觉得内容不错?我要