在之前的一篇文章中,已经实现了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)
使用者需修改以下代码:
- minio地址和端口号
- access_key和secret_key
- 开放的bucket
将python D:\script.py
命令填写到文件->偏好设置->图像->命令
运行效果:

注意:本文归作者所有,未经作者允许,不得转载