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

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

        一开始使用的是PicGo来上传文件,每次都要单独复制网址使用起来不方便。后来发现GitHub有API可以上传文件,那这件事情就简单的多了。

接下来简单介绍一下使用API上传文件的过程:

1、创建一个token(也可以使用账号和密码,但是安全性得不到保障)

登录自己的账号,然后进入token创建网站https://github.com/settings/tokens

创建完成后一定要复制你的token,他只显示一次!

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

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

相关推荐