最近搭建了一個自己的博客網站和一個在線圖片格式轉換工具,經常寫博客的時候需要上傳圖片,在線轉換工具也需要一定的空間來臨時存放圖片文件。服務器的存儲空間又比較有限,於是就想着將圖片存儲的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