使用GitHub的API实现文件上传--李渣渣(lizaza.cn)

时间:2024-02-01 16:53:12

        最近搭建了一个自己的博客网站和一个在线图片格式转换工具,经常写博客的时候需要上传图片,在线转换工具也需要一定的空间来临时存放图片文件。服务器的存储空间又比较有限,于是就想着将图片存储的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