惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
J
Java Code Geeks
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Last Week in AI
Last Week in AI
雷峰网
雷峰网
博客园_首页
小众软件
小众软件
美团技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog
Google DeepMind News
Google DeepMind News
MyScale Blog
MyScale Blog
U
Unit 42
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
大猫的无限游戏
大猫的无限游戏
Engineering at Meta
Engineering at Meta
N
Netflix TechBlog - Medium
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 叶小钗

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
Typora 自定义命令自动上传图片 - 少数派
2020-05-12 · via 少数派

背景

Typora是我非常喜欢的Markdown编辑器,之前的一个更新,Typora支持了“上传图像”的功能(即写文章时,插入图片自动将其上传至图床),我们可以直接借助IPic、uPic、PicGo等程序,配合Typora自动将图片上传至又拍云等对象存储平台。但是,官方的文档晦涩难懂,我尝试进行了一些配置,但始终不好使,那咋办嘛?

其实,将本地图片上传至图床,这个过程本质上来说就是一条HTTP请求,但是如果这个过程还需要在后台一直开着一个图床软件或者安装一些命令行工具(更何况很多工具也是收费的),代价就有些大了。庆幸的是,Typora支持不借助这些图床工具,通过自定义命令(脚本)的方式,完成自动上传图片的功能。

那么,能不能自己写一个十几行代码的脚本来适配Typora呢?当然可以了。

一起开始吧

以Typora自定义命令上传图片为例,当我们从我们插入一张图片时,发生了什么?我们在Typora插入一张本地的图片后,Typora会调用预先设置的自定义命令(通常是运行一个脚本)来上传图片,自定义命令(脚本)上传完图片后输出(注意这里有坑)相应的URL,Typora会读取该URL,并自动把本地图片地址替换为相应的URL。所以只要配置得当,我们在写作时,只需要准备好素材,直接对素材command + c command + v了。

typora自定义命令上传图片的流程

综上所述,如果我们要通过自定义命令的方式实现上传图片的功能,只需要三步:

  • 编写能够上传图片至相应的图床或者对象存储的脚本
  • 在偏好设置中进行相应的设置
  • 测试是否正常

编写脚本(上传至又拍云对象存储)

一开始我尝试使用Python实现,但是发现Typora的自定义脚本,似乎并不能完美的调用Python脚本(也可能是自己没处理好一些参数之类的东西)。无奈,面向搜索引擎,现学现卖,最终用shell脚本实现了通过REST API上传图片至又拍云对象存储的功能,结果发现出奇的简单,脚本如下所示。

 #!/bin/bash
 ​
 # 各类配置信息
 bucket="sample" # 云存储服务的名称
 remote_path="default/" # 上传默认的路径
 auth="xxxxxxx" # 操作员名和操作员密码按照operator:password拼接Base64编码
 base_url="https://xxx.xxx.xx/" # 对象存储绑定的域名
 ​
 # 上传图片
 for i in "$@"; do
     curl https://v0.api.upyun.com/"$bucket"/"$remote_path" -H "Authorization: Basic ""$auth" --upload-file "$i"
 done
 ​
 # 输出结果
 echo "Upload Success:"
 for file in "$@"; do
     IFS='/' read -r -a array <<< "$file"
     id="${#array[@]}"
     echo "$base_url""$remote_path""${array[$id-1]}"
 done

脚本相对简单(具体API可以参考官网文档),分为三步

  • 各类配置信息。又拍云对象存储相关的信息。
  • 上传图片。使用curl命令调用REST API上传图片。
  • 输出结果。适配Typora,输出结果。

我们在写一个脚本的时候,大体上关注三部分内容,输入、处理过程和输出。处理过程是自己实现的所以还好,但Typora上传图片自定义命令的传参和输出是真的奇坑。

  • 传参。Typora上传图片调用自定义命令时,会将待上传的图片作为命令行参数,传入脚本。如bash upload.sh 1.jpg 2.jpg,这里具体有几张待上传的图片不确定,所以参数长度是不固定的,你的脚本必须上传所有作为参数传入的图片。Typora并没有在文档中直接说明这一点(传参的方式、长度),真的给我坑坏了。
  • 输出。事实上,Typora并不关心我们脚本中上传图片的具体过程如何,它只关心我们脚本的最终输出。Typora要求脚本输出结果的方式简单粗暴,直接echo(其他语言比如Python的print)。注意,直接echo也是有格式要求的,脚本需要首先输出Upload Success:,之后,一行对应一个URL,具体格式如下: 
Upload Success:

https://pic.gaficat.com/default/icon_512x512.png

https://pic.gaficat.com/default/icon_256x256.png

偏好设置

Typora上传脚本支持的自定义命令,可以在偏好设置中选择。上传服务选择Custom Command,自定义命令就是我们插入图片后,Typora调用的命令。如刚才我们的脚本名称为upload.sh,自定义命令就可以设为bash upload.sh,注意替换upload.sh的路径为绝对路径。

Typora自定义命令上传图片偏好设置

测试是否正常

完成脚本和偏好设置后,就可以测试脚本是否正常了。打开偏好设置,直接点击验证图片上传选项

验证图片上传选项

如果你看到下面这个久违的画面后,那么恭喜你,万事大吉。

自定义命令上传图片测试成功

尾巴

市面上确实有很多功能丰富的Markdown编辑器,但所见即所得、小巧轻量的Typora依然是我最喜欢的。图片上传功能的加入,极大方便了写作的过程,想想之前,写文章需要手动将图片拖到图床APP,再把URL复制到文章中,就两个字,“繁琐”。

最后,用Typora写作,自定义命令上传图片,一个脚本,十几行代码,卸载掉各种图床工具,插入图片直接command + v,写作原本就该这么简单嘛!