LOADING

Typora+Alist图床功能实现

由于平时我写文章都是以markdown形式上传的,编写工具使用的是typora,图片默认保存在本地,想在云端也保存一份(顺便当个图床)
但是typora支持的gopic工具不是很好用(点名github) :鹿乃_生气:
于是就写了一个自动上传的CLI工具
接口默认对接到本站的Alist共享列表,可以实现类似图床的功能

Github仓库:https://github.com/kanoqwq/Alist-uploader
(写的比较随意,不过希望有issue提交())

使用说明

环境:nodejs

安装:npm i

USAGE: node kano_img_bed -upload [path]

typora设置

  • 上传服务选择 “Custom Command”
  • 命令输入:node ${path}/kano_img_bed.js -upload path表示文件路径

效果

image-20221012220755960

代码:

const fs = require('fs')
const axios = require('axios')
const path = require('path')
const FormData = require('form-data')
//域名
const domain = 'https://pan.kanokano.cn'
//上传目录
const uploadPath = '/阿里云の盘/Typora图床'

//图片上传接口
async function upload(path) {
    const form = new FormData();
    form.append('path', uploadPath);
    form.append('files', fs.createReadStream(path));
    let result = await axios.post(
        `${domain}/api/public/upload`,
        form,
        { headers: form.getHeaders() }
    ).then(
        (res) => {
            return true
        },
        (err) => {
            return false
        }
    )
    return result
}
function getLink(baseName) {
    axios.post(
        `${domain}/api/public/path`,
        { "path": uploadPath }
    ).then(
        (res) => {
            //请求成功
            let files = res.data.data.files
            files.forEach(fileName => {
                baseName.forEach(base => {
                    if (base == fileName.name) {
                        console.log(fileName.name);
                    }
                })
            })
        },
        (err) => {
            console.error(err.message);
        }
    )
}
async function main() {
    //获取参数
    let arguments = process.argv.splice(2)
    if (arguments[0] == '-upload') {
        let status = false
        //遍历上传图片
        for (let i = 1; i < arguments.length; i++) {
            //获取文件路径和文件名
            let fullpath = path.join(arguments[i])
            let baseName = (path.basename(arguments[i]))
            //上传图片
            status = await upload(fullpath)
            if (status) {
                console.log('https://pan.kanokano.cn/d' + uploadPath + '/' + baseName);
            } else {
                console.log(`${baseName}上传失败`)
                break
            }
        }

    } else {
        console.log('USAGE: -upload [path]');
    }
}
main();

    发表回复

    电子邮件地址不会被公开。必填项已用 * 标注