Typora是我非常喜欢的Markdown编辑器,之前的一个更新,Typora支持了“上传图像”的功能(即写文章时,插入图片自动将其上传至图床),我们可以直接借助IPic、uPic、PicGo等程序,配合Typora自动将图片上传至又拍云等对象存储平台。
一起开始吧
以Typora自定义命令上传图片为例,当我们从我们插入一张图片时,发生了什么?我们在Typora插入一张本地的图片后,Typora会调用预先设置的自定义命令(通常是运行一个脚本)来上传图片,自定义命令(脚本)上传完图片后输出(注意这里有坑)相应的URL,Typora会读取该URL,并自动把本地图片地址替换为相应的URL。所以只要配置得当,我们在写作时,只需要准备好素材,直接对素材command + c
、command + v
了。
![0f4b287cefbb45e557c9b072580944e4.png](https://img-blog.csdnimg.cn/img_convert/0f4b287cefbb45e557c9b072580944e4.png)
综上所述,如果我们要通过自定义命令来上传图片,只需要三步:
- 编写能够上传图片至相应的图床或者对象存储的脚本
- 在偏好设置中进行相应的设置
- 测试是否正常
编写脚本
#!/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
Copy
脚本相对简单(具体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://sample.com/1.jpg
https://sample.com/2.jpg
事实上,你可以使用任何变成语言,上传图片至任意的平台。只要你脚本处理好传入的参数,上传完所有图片,最终的输出结果是上面的格式即可。
微信公众号图库
如果是做微信的文章分享,可以使用微信的图床, 查看微信开发者文档可知,微信的素材库是100000个,但是"上传图文信息的图片"不占用总的素材库的数量,换句话就是不限量使用
![8db5f3a0518c472f96acf6d1af690c19.png](https://img-blog.csdnimg.cn/img_convert/8db5f3a0518c472f96acf6d1af690c19.png)
我们可以调用微信的接口来上传图片(注意:微信的图库不能外链,只限于微信平台使用),查询文档可知,微信的上传需要在微信公众平台设置调用的IP白名单来获取token,对于没有公网IP的用户来说,只能购买一台固定IP的服务器来实现图片的上传,这里我使用go来实现了后台获取Token,并接受前台传递过来的图片中传到微信的服务器,详细请留意后面的文章
前台sh脚本就很简单,接受多个本地的图片地址参数 ,并依次取出图片地址,再用使用curl来
![3e3de693b5cc6a13f2641c2200455fc4.png](https://img-blog.csdnimg.cn/img_convert/3e3de693b5cc6a13f2641c2200455fc4.png)
偏好设置
Typora上传脚本支持的自定义命令,可以在偏好设置中选择。上传服务选择Custom Command,自定义命令就是我们插入图片后,Typora调用的命令。如刚才我们的脚本名称为upload.sh,自定义命令就可以设为bash upload.sh
,注意替换upload.sh的路径为绝对路径。
![a9de79b40df1a66cf257ad5e90daf69d.png](https://img-blog.csdnimg.cn/img_convert/a9de79b40df1a66cf257ad5e90daf69d.png)
测试是否正常
将图片直接拖入到Typora中,或者粘贴至剪切板,Typora会自动调用脚本,将图片上传至微信的服务器,并插入markdown语法到文章中
![94a837a2a98b42588117f92e9ddf4845.png](https://img-blog.csdnimg.cn/img_convert/94a837a2a98b42588117f92e9ddf4845.png)
图片上传功能的加入,极大方便了写作的过程,想想之前,写文章需要手动将图片拖到图床APP,再把URL复制到文章中,就两个字,“繁琐”。插入图片直接command + v
,写作原本就该这么简单嘛!