Typora自定义Gitee图床上传脚本

新建Gitee仓库

  • 仓库必须是开源(所有人可见)
  • 选择初始化
image-20210612100355952

获取Gitee OpenAPI的access_token

在设置-安全设置-私人令牌-生成新令牌,令牌需要有projects权限,生成后保存好给到的access_token。

Python3环境与脚本配置变量的修改

提前装好依赖

1
2
3
pip3  install -U requests
pip3 install -U cos-python-sdk-v5
pip3 install opencv-python
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
import requests
import sys
import time
import random
import os
import base64
import json
import cv2

# git commit的信息
message="图床"
# 刚刚获取到的私人令牌
access_token="XXXXXX"
# gitee的用户名
owner="XXXXXX"
# 刚刚新建的仓库名
repo="pic-repo"
# 提交文件目标目录
dir="img"

def compress_img(img):
src=cv2.imread(img, 1)
d,fname=os.path.split(img)
purename=os.path.splitext(fname)[0]
cv2.imwrite(d+"/"+purename+".jpg", src, [cv2.IMWRITE_JPEG_QUALITY, 80])
return d+"/"+purename+".jpg"

def get_size(file):
# 获取文件大小:KB
size = os.path.getsize(file)
return size / 1024

base_url="https://gitee.com/api/v5/repos/"
filename=sys.argv[1]
filepath=sys.argv[2]
imgs=sys.argv[3:]
tmp="""{"access_token":"%s","content":"%s","message":"%s"}"""

arr=[]
hasF=False
for img in imgs:
file_ext = os.path.splitext(img)[-1]
newName="%s/%s_%s_%s" % (filename, filename,time.strftime("%Y%m%d%H%M%S", time.localtime()),random.randint(100000, 999999))
url=base_url+owner+"/"+repo+"/contents/"+dir+"/"+newName+file_ext

if (get_size(img)>1000):
img = compress_img(img)

with open(img, 'rb') as f:
encode_img = base64.b64encode(f.read())
img_base64 = encode_img.decode()
#print('data:image/{};base64,{}'.format(file_ext[1:], img_base64))
headers={"Content-Type":"application/json;charset=UTF-8"}
data=tmp%(access_token, img_base64, message)
f.close()
try:
res=requests.post(url=url, headers=headers, data=data.encode('utf-8'))
res.encoding = "utf-8"
resBody=json.loads(res.text)
arr.append(resBody['content']['download_url'])
except Exception as e:
print(e)
hasF=True

if (hasF):
print("Upload Failed:")
else:
print("Upload Success:")
for a in arr:
print(a)

Typora配置

  • 取消勾选本地位置的图片规则
    • 这样就不会自动上传图片,等到文章编辑好之后,再手动右键图片进行上传。
    • 截图粘贴的图片默认会放到typora自己的一个资源文件夹,需要定时清理(Mac下为/Users/XXXX/Library/Application Support/typora-user-images)
  • 勾选网络位置的图片规则
    • 会自动将网络位置的图片上传到图床
  • 上传服务填写Custom Command
  • 命令填写python脚本,并附带``${filename}${filepath}`参数
    • /usr/bin/python3 /Users/Tung/LocalDoc/hexoblog/cosupload.py "${filename}" "${filepath}"
    • 环境中可能有多种python环境,手动指定install了依赖包的那个环境即可
image-20210612102101852

image-20230402233103239

参考文档

Upload Images (typora.io)

Gitee API 文档


Typora自定义Gitee图床上传脚本
http://www.tung7.com/茶话闲谈/Typora自定义Gitee图床上传脚本.html
Author
Tung7
Posted on
June 12, 2021
Licensed under