Typora

markdown语法可谓是编写文档的利器,简单,快速,好看。

而大部分编写markdown文档的工具都是如IDEA般一半源代码一半可视化

所以如果有一款所见即所得的markdown工具那再爽不过。

我目前在使用的软件是[Typora]: https://typora.io/ ,也将它推荐给了一些朋友使用

这个软件1.0之后是收费的,如果你想先体验一番,并不想那么早付费,可以下0.x的版本,地址如下:

https://typora.io/releases/all

选择【DEV/Beta Release】页, 在页面最下面选旧版本。

当然,这并不是本篇文章的重点,重点是介绍它的上传文件功能

上传文件

在我们编写文档时,很自然的会插入一些图片,让我们的文档更加饱满。

而当我们想要将文档发表到网上时,就不得不把先这些图片换成https链接,不然网站无法读取到这些图片。

这个过程是挺痛苦的,尤其是图片多了的时候。

而Typora就有个一键上传图片的功能

在偏好设置的图像一栏中,选择上传服务

如果你是mac用户,那么可以直接使用iPic。windows我还没用过,当然还可以自定义上传,这部分在文章后面给大家介绍。

配置好并验证成功后,便可右键文档中的图片,选择上传图片。iPic将上传到微博的匿名图床中。

上传完毕后typora将自动把上传完成的图片地址替换到文档中。

不仅如此,typora还能一键将文档中的所有图片上传。

点击工具栏中的格式 --> 图像 --> 上传所有本地图片

此时已经可以满足绝大部分需求了,美中不足的时,这样上传的图片会有点糊,但还可以接受。如果你不能接受,那可以像我一样,上传到自己的图床中。

自定义上传

typora在上传服务中支持自定义上传方式。

使用该方式相当于typora在你点击上传图片是会运行你在里面写的脚本,参数为文档中图片的绝对路径。

如你在命令中编写

/usr/bin/upload.sh

文档中的图片为

/opt/a.jpg

那么此时typora就会执行

/usr/bin/upload.sh /opt/a.jpg

并期望命令执行完毕之后输出

https://xxx.com/a.jpg

如果是一键上传文档中所有图片,那么执行的命令为

/usr/bin/upload.sh /opt/a.jpg /opt/b.jpg

a.jpg 和 b.jpg是文档中的两个图片

期望输出

https://xxx.com/a.jpg
https://xxx.com/b.jpg

只要是两个链接就可以,链接的数量和上传图片的数量一定要对应。

使用七牛云图床

我自己是使用的七牛云图床上传的图片,如果你用的是别的图床也可以。我这里只是提供案例给大家参考。

你可以把typora认为是个客户端,只要你编写的脚本能够接收typora给的参数,并把这些图片传到图床上,并且输出链接,就可以了。

七牛云本身提供上传图片的脚本。

将对应平台的脚本下载下来,然后查看七牛云文档:https://developer.qiniu.com/kodo/1302/qshell,看下如何上传文件。

鉴权部分我就直接略过了。

看完之后发现七牛云的脚本只能支持上传单个文件,但是没有关系,我们可以for循环处理这个问题。

由于typora只传递文件参数,所以我们需要把这个脚本再封装一次。

首先我们需要得到文件名,比如说上传的文件为:/opt/a.jpg, 我们需要得到a.jpg作为图床的文件路径

qshell fput if-pbl a.jpg  /opt/a.jpg

if-pbl为图床的bucket a.jpg为图片上传到图床的路径

为了上传的图片不会重复,我们可以在路径前缀加上日期,比如这样

qshell fput if-pbl 2022/05/29/a.jpg  /opt/a.jpg

明白了这些,我们现在就开始编写脚本

上传单个图片的脚本

首先是上传单个图片的脚本

vim upload.sh

#!/bin/bash
NOW=$(date +%Y/%m/%d)
str=$1
filename=${str##*/}
KEY=$NOW/$filename
qshell fput if-plb $KEY $1 > /dev/null
echo "https://notes.xxx.cn/$KEY"

NOW=$(date +%Y/%m/%d): 获取到当天的日期:2022/05/29

$1: 获取执行脚本传入的第一个参数,也就是文件名:/opt/a.jpg

filename=${str##*/} : 截取str中最后个/右侧的字符串:a.jpg

https://notes.xxx.cn/是图床地址

由于qshell脚本本身会输出一些内容,影响typora抓取结果,所以将 qshell的输出指定到/dev/null

将脚本赋权:chmod +x upload.sh

测试脚本:

upload.sh /opt/a.jpg
输出
https://notes.xxx.cn/2022/05/29/a.jpg

上传多个图片的脚本

这个就很简单了,只要for循环一遍参数就行了

vim multi_upload.sh

#!/bin/bash
for i in "$@"
do 
    upload.sh  $i
done

$@: 获取参数列表

赋权:chmod +x multi_upload.sh

测试脚本:

multi_upload.sh /opt/a.jpg /opt/b.jpg 
输出
https://notes.xxx.cn/2022/05/29/a.jpg
https://notes.xxx.cn/2022/05/29/b.jpg