typora+chevereto Python 自动上传

  • 我是用的Typora来用markdown编写文章,使用chevereto搭建了个人图床,配合Typora的自动上传功能,参考了别人的代码,来实现粘贴图片自动上传到个人图床
  • 注意:你的typora需要是最新版

PYTHON脚本

  • 创建一个python脚本,名字随意,位置自定

    1
    2
    3
    cd ~/文档/
    gedit upload.py
    12
  • 复制粘贴以下代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    #!/usr/bin/env python3
    # -*- encoding: utf-8 -*-
    # author: guiu
    # data: 2020.2.28

    import requests
    import json
    import mimetypes
    import argparse
    import sys

    APP_DESC = """
    一个上传图片到chevereto图床的命令行工具
    """

    print(APP_DESC)
    if len(sys.argv) == 1:
    sys.argv.append('--help')

    parser = argparse.ArgumentParser()
    parser.add_argument('-s', '--source', type=str, nargs='+', help="", required=True)
    parser.add_argument('-c', '--config', default="./config.json", help="读取配置文件", required=True)
    args = parser.parse_args()

    # 从参数中获取要上传的文件列表
    img_list = args.source
    # print(img_list)

    def read_conf(path):
    with open(path,"r",encoding="utf-8") as f:
    confstr = f.read()
    conf = json.loads(confstr)
    return conf

    def up_to_chevereto(img_list):
    # 获得本地图片路径后,上传至图床并记录返回的json字段
    for img in img_list:
    # 先判断传过来的是本地路径还是远程图片地址
    if "http" == img[:4]:
    # 非本地图片的话可以考虑下载到本地再上传,但是没这个必要
    print(img)
    continue
    else:
    try:
    res_json = upload(formatSource(img))
    parse_response_url(res_json,img)
    except:
    print(img+"\t上传失败")

    def upload(files):
    # 图床api
    # APIKey = "THERE PUT YOUR APIKEY"
    conf = read_conf(args.config)
    url = conf['url'] + "?key=" + conf['APIKEY']
    r = requests.post(url, files=files)
    return json.loads(r.text)

    def formatSource(filename):
    imageList = []
    mime_type = mimetypes.guess_type(filename)[0]
    imageList.append(
    ('source', (filename, open(filename, 'rb'), mime_type))
    )
    #print (imageList)
    return imageList

    def parse_response_url(json, img_path):
    # 从返回的json中解析字段
    if json['status_code'] != 200:
    print("{}\tweb端返回失败,可能是APIKey不对. status_code {} .".format(
    img_path, json['status_code'])
    )
    else:
    img_url = json["image"]["url"]
    print(img_url)

    up_to_chevereto(img_list)
    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677

查看你的API KEY

  • 到你的chevereto站点->仪表盘->设置->API

image-20200626105556755

  • 这里你可以使用默认的,也可以自定义

编写配置文件

1
2
3
cd ~/文档
gedit config.json
12
1
2
3
4
{
"APIKEY": "YOUR API KEY",
"url": "http://your_website/api/1/upload/"
}

TYPORA设置

  • 打开typora->文件->偏好设置->图像->上传服务设定->选择Custom Command
  • 如果需要自动上传,插入图片时选择上传图片,并勾选如图所示选项

image-20200626110731568

  • 填写以下命令,路径填你自己的

    1
    2
    python3 你的upload.py路径 -c 你的config.json路径 -s
    1
  • 然后点击验证图片上传选项,出现以下结果表示配置正确

image-20200626110824911