beibeijia 2020-05-15
最近搭建了一个自己的博客网站和一个在线图片格式转换工具,经常写博客的时候需要上传图片,在线转换工具也需要一定的空间来临时存放图片文件。服务器的存储空间又比较有限,于是就想着将图片存储的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/
完整代码
import requests import base64 import json # 读取文件 def open_file(file_path): with open(file_path, ‘wb+‘) as f: return f.read() # 将文件转换为base64编码,上传文件必须将文件以base64格式上传 def file_base64(data): data_b64 = base64.b64encode(data).decode(‘utf-8‘) return data_b64 # 上传文件 def upload_file(file_data): file_name = "" #文件名 token = "[token]" url = "https://api.github.com/repos/[user]/[repo]/contents/[path]/"+file_name # 用户名、库名、路径 headers = {"Authorization": "token " + token} content = file_base64(file_data) data = { "message": "message", "committer": { "name": "[user]", "email": "" }, "content": content } data = json.dumps(data) req = requests.put(url=url, data=data, headers=headers) req.encoding = "utf-8" re_data = json.loads(req.text) print(re_data) print(re_data[‘content‘][‘sha‘]) print("https://cdn.jsdelivr.net/gh/[user]/[repo]/[path]"+file_name) # 在国内默认的down_url可能会无法访问,因此使用CDN访问 if __name__ == ‘__main__‘: fdata = open_file(‘cloud.jpg‘) upload_file(fdata)
注意:上传的文件名不要有重复,否则会导致上传失败(可以使用当前时间+随机数的方式来避免)
版权声明:该文章内容为作者原创,如有转载请标明出处lizaza.cn