开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
在使用
typora写文章的时候,总是会遇到贴图的问题,typora默认使用本地图片,我们在将文章贴给别人或者上传到其他地方的时候,总是不方便。如果拥有图库,那可以通过写脚本的方式,自动上传图片并替换为远程的URL
前期准备
-
已安装
Node.js> node -v v14.17.0 -
已安装
typora版本 1.4.4 已验证
-
已拥有
MiniIO图库,可以通过minio javascript sdk上传到图库拥有
MiniIO私有图库,具体可见 搭建MinIO: https://juejin.cn/post/7176544729130074172
编写 node 脚本
// path/scripts/typora_upload_image.js
const path = require('path')
const Minio = require('minio')
// 解析参数, 获取图片的路径,有可能是多张图片
const parseArgv = () => {
const imageList = process.argv.slice(2).map(u => path.resolve(u))
return imageList
}
// 入口
const uploadImageFile = async (imageList = []) => {
// 创建连接
const minioClient = new Minio.Client({
// 这里填写你的minio后台域名
endPoint: 'minio 地址',
port: 9000,
useSSL: false,
// 下面填写你的accessKey和secretKey
accessKey: 'minio accessKey, 通过控制台获取, 访问 ip:9090',
secretKey: 'minio accessKey, 通过控制台获取, 访问 ip:9090'
})
// 开始上传图片
const metaData = {}
const tasks = imageList.map(image => {
return new Promise(async (resolve, reject) => {
try {
// 图片重命名,这里采用最简单的,可以根据自己需求重新实现
const name = `${Date.now()}${path.extname(image)}`
// 具体请看Minio的API文档,这里是将图片上传到blog这个bucket上
const res = await minioClient.fPutObject('自己创建一个 bucket', name, image, metaData)
resolve(name)
} catch (err) {
reject(err)
}
})
})
const result = await Promise.all(tasks)
// 返回图片的访问链接
result.forEach(name => {
const url = `http://{ip:9000}/{自己创建的 bucket}/${name}`
// Typora会提取脚本的输出作为地址,将markdown上图片链接替换掉
console.log(url)
})
}
// 执行脚本
uploadImageFile(parseArgv())
下载 minio sdk
# 导航到 path/scripts/typora_upload_image.js 目录下
> npm install minio
# 自动生成 pakage-lock.json 和 node_modules 文件夹
配置 typora
编写自定义命令,使用 node 脚本上传
typora -> 偏好设置 -> 图像 -> 上传服务器设定 -> 上传服务:自定义命令 -> node path/scripts/typora_upload_image.js
上传图片
粘贴图片,选择上传图片,即可完成上传,获取远程 MinIO 返回的地址