# 登录
以 sm 图床为例:https://sm.ms/
用接口测试工具发送一个如下请求:
获取一个 token,保存下来。
多次请求可能会造成不能登录的情况,token 保存后等到失效再换,期间不用重复登录。
# 上传图片
这里我们想写一个程序快速给图片批量上传图床。
import os | |
import requests | |
from datetime import datetime | |
from PIL import Image | |
def upload_file(folder_path: str): | |
# 获取当前时间并格式化为字符串 | |
time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") | |
# 获取文件夹中的所有一级文件 | |
files = os.listdir(folder_path) | |
# 遍历文件 | |
for file in files: | |
# 构建文件的完整路径 | |
file_path = os.path.join(folder_path, file) | |
# 检查文件是否为图片 | |
try: | |
# 尝试打开图片文件 | |
img = Image.open(file_path) | |
img.close() | |
except (IOError, OSError): | |
# 如果文件不是图片文件,则忽略该文件 | |
pass | |
# 上传请求的 URL | |
url = "https://sm.ms/api/v2/upload" | |
# 请求的参数 | |
payload = {} | |
# 要上传的文件 | |
files = [ | |
('smfile', (time + '.png', open(file_path, 'rb'), 'image/png')) | |
] | |
# 请求头 | |
headers = { | |
'User-Agent': 'Apifox/1.0.0 (https://apifox.com)', | |
'Authorization': '...' | |
} | |
# 发起 POST 请求,上传文件 | |
response = requests.request("POST", url, headers=headers, data=payload, files=files) | |
# 处理上传响应 | |
resp = response.json() | |
if resp['success'] == False: | |
if resp['code'] == 'image_repeated': | |
# 图片重复上传,获取已存在的图片链接并打印 | |
url = resp['images'] | |
print(f'![{file}]({url})') | |
else: | |
# 上传失败,打印响应 | |
print(resp) | |
if resp['success'] == True: | |
# 上传成功,获取图片链接并打印 | |
url = resp['url'] | |
print(f'![{file}]({url})') | |
# 调用 upload_file 函数,传入要上传的图片文件夹的路径 | |
upload_file('/home/ros/Documents/数电实验/excalidraw') |
upload_file
函数:传入要上传的图片文件夹的路径Authorization
字段:填入登录获得的 token
免费版有限制:每分钟 20 次,每小时 100 次。
建议一次放十几张图片,比较合适。