當前位置:
首頁 > 知識 > 利用 github 和 python3 以及 MWeb 打造自己的博文圖床

利用 github 和 python3 以及 MWeb 打造自己的博文圖床

這兩天一直在糾結圖床的問題,因為用自己的伺服器來做圖床這個事情我考慮再三,覺得比較不靠譜-_-|||,因為我的伺服器只是一個小小的低配伺服器,用來當自己的博客圖床本來這個問題不大,但是我的博文基本都是在 csdn 上,流量還是頗為可觀的。把自己的伺服器給搞垮了,那可是吃不消的一件事情。

雖然之前考慮過用 github 來做自己的圖床,但是考慮兩個問題,一個是國內訪問速度較慢,另一個則是 github 作為全球最大的同性交流平台,我不忍心把它當成一個圖床來使用。

不過這不是最近被微軟收購了么,微軟這麼財大氣粗的,應該不在乎我把它當成圖床了吧。

說干就干,還是先釐清思路。

釐清把 github 當圖床的思路

  1. 在 github 新建一個項目,存放圖片,以及自己的博文。
  2. 本地搞一個 python3 的服務,將圖片用規律存儲到本地。
  3. MWeb 的相關想法。
  4. 將圖片全部存放在本地,和自己的博文存放在一起。
  5. 用 MWeb 寫博文的時候,圖片用其自帶的圖床管理 api 將圖片存放到本機目錄。
  6. 由於 github 的圖片路徑是有規律的,所以計算出來最終路徑,直接保存到博文當中。
  7. 用 git 將文章和圖片全部推到倉庫,然後就啥都可以了。

python 腳本撰寫以及啟動

在上一篇博文《打造一個私人圖床伺服器》中,我們已經完成了一個圖床的腳本,這裡只要適當修改就可以了。其實就是刪除一些代碼就可以了。

main_upimg.py 主程序代碼

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
from sanic import Sanic
from sanic.response import json, text, file
import os, sys
import hashlib
app = Sanic()
baseDir = "/Users/fungleo/Documents/Blog/articles/image/"
# 成功以及失敗的返回腳本
def ok(data):
return json({"data": data, "status": 0})
def fail(data):
return json({"data": data, "status": 1})
# 位元組碼轉16進位字元串
def bytes2hex(bytes):
hexstr = u""
for i in range(10):
t = u"%x" % bytes[i]
if len(t) % 2:
hexstr += u"0"
hexstr += t
return hexstr.lower()
# 根據16進位字元串獲取文件後綴
def getSuffix(hexStr):
SUPPORT_TYPE = {
"ffd8ffe000104a464946":"jpg",
"89504e470d0a1a0a0000":"png",
"47494638396126026f01":"gif",
}
for i in SUPPORT_TYPE:
if i == hexStr:
return SUPPORT_TYPE[i]
return "error type"
# 上傳文件介面
@app.route("/upimg", methods=["POST"])
async def upimg(request):
# 判斷參數是否正確
if not request.files and not request.files.get("file"):
return fail("error args")
image = request.files.get("file").body
# 判斷文件是否支持
imageSuffix = getSuffix(bytes2hex(image))
if "error" in imageSuffix:
return fail(imageSuffix)
# 組織圖片存儲路徑
m1 = hashlib.md5()
m1.update(image)
md5Name = m1.hexdigest()
saveDir = baseDir + md5Name[0:2] + "/"
savePath = saveDir + md5Name[2:] + "." + imageSuffix
resPath = "/" + md5Name[0:2] + "/" + md5Name[2:] + "." + imageSuffix
# 如果文件夾不存在,就創建文件夾
if not os.path.exists(saveDir):
os.makedirs(saveDir)
# 將文件寫入到硬碟
tempFile = open(savePath, "wb")
tempFile.write(image)
tempFile.close()
# 給客戶端返回結果
return ok({"path": resPath})
if __name__ == "__main__":
app.run(host="127.0.0.1", port=7000)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76

在上一篇博文當中,我使用了讀取文件的後綴名來判斷文件的類型,這是非常簡陋的。例如,我使用屏幕截圖保存到剪切板,然後在編輯器中粘貼,這時候就是沒有文件的名字的,這就會出現問題。另外,使用後綴名這種方法也是略顯小兒科,因此,我這邊改成了讀取二進位文件的頭部位元組,並轉成16進位,然後辨別圖片類型。這樣就可靠多了。

另外這裡,我們還可以對圖片進行縮放,以及添加水印等操作,今天我就不寫了,大家感興趣,回頭可以查看我的 github 倉庫 https://github.com/fengcms/python-learn-demo/tree/master/img-github ,我寫了之後會更新進去的。

MACLinux 設置 python 腳本開機啟動

腳本寫好之後,測試一下,沒有問題,我們就可以將服務啟動起來了。

我們可以使用 python3 main_upimg.py 啟動腳本,但是這回打開一個終端窗口,我希望的是,可以在筆記本開機的時候,就把這個腳本啟動起來,然後我隨時想寫腳本,這個服務就在默默的為我提供服務。

想想都感人。

我們可以使用 nohup command & 這樣的命令,來讓服務默默的跑起來,因此,我們的這個命令就是

nohup python3 main_upimg.py &
1

但是,這樣還是需要我們啟動電腦之後執行一下,這個事情對於我這種人來說,是不能接受的。所以,我要把它寫成一個開機啟動的腳本。

創建 run.sh 文件,並輸入以下內容,因為不在當前文件夾下運行,所以要加上腳本的全部路徑,如果你也想和我一樣做的話,請把路徑修改為你的路徑。

linuxmac 下面,可以用 pwd 命令來查看當前文件夾的完整路徑

#!/usr/bin/env bash
# -*- coding: UTF-8 -*-
nohup python3 /Users/fungleo/Sites/python/github/img-github/main_upimg.py &
1
2
3

新建好文件之後,我們使用 chmod +x run.sh 將其賦予執行許可權,然後把它添加到開機運行。

開機運行設置,請查看 mac設置shell腳本開機自啟動,我這裡就不做贅述了。

殺死服務進程

經過上面的配置,我們的腳本就已經非常安靜的在那裡等著我們隨時調用了,呼之即來,非常爽快。

但是,我們如何招之即去呢?其實非常簡單,我們用 ps 這個顯示當前系統的進程狀態,以及配合 kill 命令,則可以很好的管理我們的進程了。

# 查看當前進程
ps | grep main_upimg.py
# 通過上面的命令,我們可以看到我們的進程號,然後用下面的命令,結束它。
kill -9 進程號
1
2
3
4

配置 MWeb 編輯器

通過上面的一系列折騰之後,我們的圖床服務就算是搞好了,下面我們要來配置我們的編輯器,通過編輯器的配置,我們可以很方便的使用我們的圖床。

利用 github 和 python3 以及 MWeb 打造自己的博文圖床

如上配置,主要是圖片的前綴為 https://raw.githubusercontent.com/fengcms/articles/master/image/ 這個地址。其他的都不是特別重要。

我一直使用 MWeb 編輯器來撰寫博客,不太清楚其他的 markdown 編輯器。不過我想高級一點的編輯器都應該支持這個功能才對。大家參考使用吧。

最後就是,寫好了博客之後,用 git 把內容以及圖片全部更新到倉庫中,所有的圖片就全部生效了。之後,愛把博文轉發到哪裡去,就發到哪裡去,應該沒有任何問題。

利用 github 和 python3 以及 MWeb 打造自己的博文圖床

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

基於SSM架構的網路租車系統
安卓okhttp3與伺服器通過json數據交互解析與上傳

TAG:程序員小新人學習 |