Typora 图像上传功能
适配入口
在 Typora 的选项栏中,文件→偏好设置→图像→上传服务设定,其中可以看到官方提供了几种不同的图片上传服务,其中最底下还预留了一个 [自定义命令],这个可以留给我们自己适配,因此很容易联想到博客园的图片上传服务能否适配?

适配教程
如何完成适配呢?可以看到下方有一个说明链接

点开后可以看到在 custom 章节中,官方文档指出:

简单理解就是可以自行写一个脚本,然后通过命令行参数接收来自 Typora 的图片本地路径即可,如果有很多张图片,可以多次调用。
此外,官方还提供了可能出现的问题及解决方法。
适配脚本
我们知道博客园开发了 vscode 插件是可以提供图片上传功能的,那么主要用到的是什么接口呢?
这里主要用的就是 MetaWeblog API ,它支持上传图片、发布文章。
在博客园后台的设置中,最底下有:

我们将 "允许 MetaWeblog 博客客户端访问" 设置为开启,于是可以得到:
- MetaWeblog登录名【USERNAME】
- MetaWeblog访问令牌【PASSWORD】
- MetaWeblog访问地址【BLOG_URL】
这些参数就是每个人独立的接口参数,于是向豆包咨询后,得到下面的代码:
sh
#!/bin/bash
set -euo pipefail
# ==================== 你的配置 ====================
BLOG_URL="你的MetaWeblog"
USERNAME="你的MetaWeblog登录名"
PASSWORD="你的MetaWeblog访问令牌"
BLOG_ID="你的博客园用户目录路径,如https://www.cnblogs.com/gshang,就是 gshang"
# ==================================================
echo "Upload Success:"
for img_path in "$@"; do
# 转换路径
[[ "$img_path" == [A-Za-z]:\\* ]] && img_path=$(cygpath -u "$img_path")
# 基础信息
filename=$(basename "$img_path")
mime=$(file -b --mime-type "$img_path")
# 【关键修复】用临时文件,避免参数过长
xml_file=$(mktemp)
# 写入 XML(不从命令行传,彻底解决超长)
cat > "$xml_file" <<EOF
<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>metaWeblog.newMediaObject</methodName>
<params>
<param><value><string>${BLOG_ID}</string></value></param>
<param><value><string>${USERNAME}</string></value></param>
<param><value><string>${PASSWORD}</string></value></param>
<param><value><struct>
<member><name>name</name><value><string>${filename}</string></value></member>
<member><name>type</name><value><string>${mime}</string></value></member>
<member><name>bits</name><value><base64>$(base64 -w 0 "$img_path")</base64></value></member>
</struct></value></param>
</params>
</methodCall>
EOF
# 【关键修复】从文件读取 XML,不拼命令行
resp=$(curl -s -X POST \
-H "Content-Type: text/xml; charset=utf-8" \
--data-binary "@$xml_file" \
"$BLOG_URL")
# 提取 URL(100% 兼容 Windows)
url=$(echo "$resp" | sed -n 's/.*<string>\(https[^<]*\)<\/string>.*/\1/p' | head -1)
# 输出给 Typora
[ -n "$url" ] && echo "$url" || echo ""
# 清理临时文件
rm -f "$xml_file"
done
将你的信息填写后,保存为 cnblogs.sh ,并将其放到 Typora.exe 同一目录下,我的目录是:
D:\Program Files\Typora\cnblogs.sh

最后,确保你已经安装了 git-bash ,想必作为程序员应该都装了的。我的安装目录是
D:\Program Files\Git\bin\bash.exe
于是我们得到最终输入给 Typora 的命令行:
bash
"D:\Program Files\Git\bin\bash.exe" "D:\Program Files\Typora\cnblogs.sh"

点击 "验证图片上传选项" ,可以看到图片上传成功:

日常使用测试
在 Typora 中提供了两种上传图片的形式:
单张图片上传

图片选中后,右键可以上传当前图片。
批量上传
博客写完后,图片太多可以在顶部选项栏中,格式→图像→上传所有本地图片 ,点击后一次性全部上传。
