Python脚本:Typora+minio实现markdown图片自动上传

Published on 2025-04-16 18:00 in 分类: 随笔 with 狂盗一枝梅
分类: 随笔

在之前的一篇文章中,已经实现了java版本的Typora图片自动上传功能:markdown编辑器typora本地图片上传到自己的服务器

现在使用Python+minio重新实现该功能,比Java版本精简了太多代码了

需要的依赖:

pip install minio

脚本如下:

import argparse
import mimetypes
import uuid
from datetime import date
from urllib.request import urlopen

from minio import Minio

parser = argparse.ArgumentParser(
    prog='typora_upload_image',
    description='typora上传图片脚本',
    epilog='Copyright(r), 2025'
)
parser.add_argument('urls', nargs='+', help='一个或多个URL地址')

client = Minio(
    "127.0.0.1:9000",
    access_key="{your access key}",
    secret_key="{your secret key}",
    secure=False
)


def get_file_path(path):
    now = date.today()
    return "public/" \
           + str(now.year) + "/" \
           + (str(now.month) if now.month > 10 else ("0" + str(now.month))) + "/" \
           + (str(now.day) if now.day > 10 else ("0" + str(now.day))) + "/" \
           + str(uuid.uuid4()).replace("-", "") + "." \
           + path.split(".")[-1]


def upload_to_minio(path: str) -> str:
    """
    上传图片到minio
    :param path: 源url,可能是本地图片,也可能是网络图片
    :return: minio的图片地址
    """
    file_path = get_file_path(path)
    mimetype, encoding = mimetypes.guess_type(path)
    if path.startswith("http"):
        bynary_io = urlopen(path)
        client.put_object(
            bucket_name="blog",
            object_name=file_path,
            data=bynary_io,
            content_type=mimetype,
            length=-1,
            part_size=10 * 1024 * 1024,
        )
    else:
        client.fput_object(
            bucket_name="blog",
            object_name=file_path,
            file_path=path,
            content_type=mimetype
        )
    return file_path


if __name__ == '__main__':
    urls = parser.parse_args().urls
    for url in urls:
        uploaded_url = upload_to_minio(url)
        print("https://127.0.0.1:9000/blog/" + uploaded_url)

使用者需修改以下代码:

  1. minio地址和端口号
  2. access_key和secret_key
  3. 开放的bucket

python D:\script.py 命令填写到文件->偏好设置->图像->命令

image-20250416175624159

运行效果:

动画30_resize
#typora #python
复制 复制成功