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

使用GitHub的API实现文件上传--李渣渣(lizaza.cn)的更多相关文章

  1. Resumable.js – 基于 HTML5 File API 的文件上传

    Resumable.js 是一个 JavaScript 库,通过 HTML5 文件 API 提供,稳定和可恢复的批量上传功能.在上传大文件的时候通过每个文件分割成小块,每块在上传失败的时候,上传会不断 ...

  2. 使用 JavaScript File API 实现文件上传

    概述 以往对于基于浏览器的应用而言,访问本地文件都是一件头疼的事情.虽然伴随着 Web 2.0 应用技术的不断发展,JavaScript 正在扮演越来越重要的角色,但是出于安全性的考虑,JavaScr ...

  3. resumable.js —— 基于 HTML 5 File API 的文件上传组件 支持续传后台c#实现

    在git上提供了java.nodejs.c#后台服务方式:在这里我要用c#作为后台服务:地址请见:https://github.com/23/resumable.js 我现在visual studio ...

  4. 调用Web API将文件上传到服务器的方法(.Net Core)

    最近遇到一个将Excel通过Web API存到服务器的问题,其中涉及到Excel的读取.调用API.Web  API怎么进行接收. 一. Excel的读取.调用API Excel读取以及调用API的代 ...

  5. Spring提供的API实现文件上传

    Spring为我们提供了文件上传接口MultipartRequest及其实现类StandardMultipartFile StandardMultipartFile是StandardMultipart ...

  6. angular-file-upload API angular文件上传插件

    官方例子 : http://nervgh.github.io/pages/angular-file-upload/examples/simple/ ===Directives=== nvFileSel ...

  7. ASP.NET Web API编程——文件上传

    首先分别介绍正确的做法和错误的做法,然后分析他们的不同和错误之处,以便读者在实现此功能时可避开误区 1正确的做法 public class AvaterController : BaseApiCont ...

  8. AWS S3 API实现文件上传下载

    http://blog.csdn.net/marvin198801/article/details/47662965

  9. .NET和.NET Core Web APi FormData多文件上传对比

    前言 最近因维护.NET和.NET Core项目用到文件上传功能,虽说也做过,但是没做过什么对比,借此将二者利用Ajax通过FormData上传文件做一个总结,通过视图提交表单太简单,这里不做阐述,希 ...

随机推荐

  1. iview使用之怎样给Page组件添加跳转按钮

    在项目开发过程中,我们会经常遇到使用分页的表格,然而在ivieiw中,我们通常只能使用Page组件自带的功能,如下图: 切换每页条数这些基本的功能都不说了,有时候我们需要在输入框里输入想要跳转到的页数 ...

  2. lua实现游戏抽奖的几种方法

    ^_^内容原创,禁止转载  假设配置如下: local reward_pool = { {weight = , item = {, num = }}, {weight = , item = {, nu ...

  3. java8 流式编程

    为什么需要流式操作 集合API是Java API中最重要的部分.基本上每一个java程序都离不开集合.尽管很重要,但是现有的集合处理在很多方面都无法满足需要. 一个原因是,许多其他的语言或者类库以声明 ...

  4. PHP扩展Swoole的代码重载机制

    大家都知道Swoole的性能在PHP界还算不错,同样都是PHP为什么呢,我专门研究了下. 几个概念:   1) sapi:可以简单的理解为php引擎对外的一个统一接口,使得php可以和外部程序进行交互 ...

  5. CG-CTF(2)

    CG-CTF https://cgctf.nuptsast.com/challenges#Web 续上~ 第七题:单身二十年 查看源代码: 取得flag(干杯~): 本题也可通过burp抓包,查看返回 ...

  6. QT 无法抓住异常

    出处:https://stackoverflow.com/questions/40980171/qt5core-dll-crashing I've found that enabling /EHa ( ...

  7. 【Django】runserver 0.0.0.0:0 后,究竟发生了什么

    WSGI协议 Django是遵循WSGI协议设计的 WSGI协议主要包括server和application两个部分: WSGI server:负责从客户端接收请求,将request转发给applic ...

  8. 利用python画出SJF调度图

    最先发布在csdn.本人原创. https://blog.csdn.net/weixin_43906799/article/details/105510046 SJF算法: 最短作业优先(SJF)调度 ...

  9. 理解分布式一致性:Raft协议

    理解分布式一致性:Raft协议 什么是分布式一致性 Leader选举 日志复制流程 term选举周期 timeout 选举和选举timeout 选举分裂 日志复制和心跳timeout 在分布式系统中, ...

  10. Apache Commons Lang » 3.10使用简介

    ============================================================= 行文介绍: 1.诞生背景 2.引入方案 3.简单介绍 4 .详情介绍 文档: ...