Node typora插入图片脚本

7 min read
/* 
 * typora插入图片调用此脚本,上传图片到图床
 */

const path = require('path')
// minio for node.js
const Minio = require('minio') 
const { promises } = require('fs')

// 解析参数, 获取图片的路径,有可能是多张图片
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: 'xxx.xxx.xxx',
    port: 80,
    useSSL: false,
    // 下面填写你的accessKey和secretKey
    accessKey: '*************',
    secretKey: '*************'
  })

  // 开始上传图片
  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('blog', name, image, metaData)
        resolve(name)
      } catch (err) {
        reject(err)
      }
    })
  })

  const result = await Promise.all(tasks)
  
  // 返回图片的访问链接
  result.forEach(name => {
    const url = `http://xxx.xxx.xxx/blog/${name}`
    // Typora会提取脚本的输出作为地址,将markdown上图片链接替换掉
    console.log(url)
  })
}

// 执行脚本
uploadImageFile(parseArgv())