最近搭建了一个自己的博客网站和一个在线图片格式转换工具,经常写博客的时候需要上传图片,在线转换工具也需要一定的空间来临时存放图片文件。服务器的存储空间又比较有限,于是就想着将图片存储的GitHub上,来节省服务器的空间。
一开始使用的是PicGo来上传文件,每次都要单独复制网址使用起来不方便。后来发现GitHub有API可以上传文件,那这件事情就简单的多了。
接下来简单介绍一下使用API上传文件的过程:
1、创建一个token(也可以使用账号和密码,但是安全性得不到保障)
登录自己的账号,然后进入token创建网站https://github.com/settings/tokens
创建完成后一定要复制你的token,他只显示一次!
2、调用api接口上传文件(在此以python进行示例)
官方文档v3:https://developer.github.com/v3/repos/contents/
V4:https://developer.github.com/v4/
完整代码
1 import requests 2 import base64 3 import json 4 5 6 # 读取文件 7 def open_file(file_path): 8 with open(file_path, ‘wb+‘) as f: 9 return f.read() 10 11 12 # 将文件转换为base64编码,上传文件必须将文件以base64格式上传 13 def file_base64(data): 14 data_b64 = base64.b64encode(data).decode(‘utf-8‘) 15 return data_b64 16 17 18 # 上传文件 19 def upload_file(file_data): 20 file_name = "" #文件名 21 token = "[token]" 22 url = "https://api.github.com/repos/[user]/[repo]/contents/[path]/"+file_name # 用户名、库名、路径 23 headers = {"Authorization": "token " + token} 24 content = file_base64(file_data) 25 data = { 26 "message": "message", 27 "committer": { 28 "name": "[user]", 29 "email": "user@163.com" 30 }, 31 "content": content 32 } 33 data = json.dumps(data) 34 req = requests.put(url=url, data=data, headers=headers) 35 req.encoding = "utf-8" 36 re_data = json.loads(req.text) 37 print(re_data) 38 print(re_data[‘content‘][‘sha‘]) 39 print("https://cdn.jsdelivr.net/gh/[user]/[repo]/[path]"+file_name) 40 # 在国内默认的down_url可能会无法访问,因此使用CDN访问 41 42 43 if __name__ == ‘__main__‘: 44 fdata = open_file(‘cloud.jpg‘) 45 upload_file(fdata)
注意:上传的文件名不要有重复,否则会导致上传失败(可以使用当前时间+随机数的方式来避免)
版权声明:该文章内容为作者原创,如有转载请标明出处lizaza.cn