教程介绍
Python上传图片到七牛云储存代码,Typora将图片上传到七牛云对象存储中(访问速度快),七牛云免费10G。
Python代码分享
#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
# author: gflik
# data: 2022.10.09
import uuid
import requests
import sys
from qiniu import Auth, put_file, etag, put_data
class UploadClient:
def __init__(self):
# 需要修改一下两行!
access_key="access_key"
secret_key="secret_key"
# 构建鉴权对象
self.auth= Auth(access_key, secret_key)
self.bucket_name="82coco"
def upload(self,data):
"""
上传二进制数据到七牛云
:param data: 二进制数据
:return:
"""
# 上传后保存的文件名
# 如果不指定保存的文件名称,七牛云会自动生成一个唯一的图片名称
# 哈希值
key = 'markdown_img/{}.png'.format(str(uuid.uuid4()).replace("-",""))
# 生成上传 Token,可以指定过期时间等 3600单位是s
token = self.auth.upload_token(self.bucket_name, key, 3600 * 24)
# 要上传文件的本地路径
# 将图片二进制数据上传到七牛云
ret, info = put_data(token, key, data)
# print(ret)
# print(info)
if info.status_code == 200:
# 上传图片成功
# 拼接完整url地址
full_url = "http://cdn.82coco.cn/"+ ret["key"]
return full_url
else:
# 封装好的工具类异常需要抛出,不能私自解决异常 否则外界调用遇到异常没法解决
raise Exception(info.exception)
def upload_img(self,file_list:list):
for img in file_list:
# 先判断传过来的是本地路径还是远程图片地址
if "http" == img[:4]:
# 非本地图片的话可以考虑下载到本地再上传,但是没这个必要
print(img)
continue
else:
try:
print(self.upload(open(img,"rb")))
except:
print(img + "\t上传失败")
if __name__ == '__main__':
if len(sys.argv) < 2:
print("call error,wrong image format")
sys.exit(1)
# print(sys.argv)
client=UploadClient()
client.upload_img(sys.argv[1:])使用方法
将此代码解压放入Typora根目录
打开代码修改accesskey 与 secretkey(需注册七牛云账号)
打开Typora - 文件 - 偏好设置 - 图像
[img=110,0]https://attach.wdzzz.com/forum/202211/18/015825cbh548j1wotw5wt1.png?l[/img]
按照上述图片填入

