配置圖床,感覺已是學習記錄時必備的一項技能。旨在將圖片保存在雲端服務器,方便查看。
因筆者使用的七牛圖床測試域名已被收回,改用網易雲圖床(免費),並以此文章作為記錄
網易雲圖床申請
- 網易雲登錄注冊
贈送對象存儲50G的存儲空間、20G的月流量、100萬次get請求、10萬次put請求!具體詳情頁
注冊成功后進入對象存儲、創建桶(桶為對象存儲的容器)。創建好后即可擁有自己的圖床,步驟如圖所示:
- 手動管理圖片對象(略)
自動管理上傳圖片
上傳圖片需要使用到自己的秘鑰,因此首先要找到個人秘鑰
位置如下圖所示
import nos
access_key = "*********"
secret_key = "*********"
end_point = "****" # 區域名
bucket = "****" # 桶名,存放對象容器
def uploadImg():
client = nos.Client(
access_key,
secret_key,
end_point=end_point,
num_pools=10, # 允許打開的最大 HTTP 連接數
timeout=5, # 建立連接的超時時間(單位:秒)
max_retries=4, # 請求失敗后最大的重試次數
enable_ssl=True # 后續與 NOS 服務器進行數據傳輸、交互時,是否使用 HTTPS
)
return client
client = uploadImg()
file_name = "****" # 上傳后的文件名稱
filePath = "****" # 所需上傳的文件路徑
client.put_object(bucket, file_name, open(filePath, "rb"))
- 圖片統一上傳
思路: 固定文件夾存放圖片,每次上傳時遍歷文件夾內圖片,逐一上傳
網易雲上傳文件名稱相同時會進行覆蓋操作,可將上傳過的文件名保存於本地,遍歷圖片上傳時通過比對判斷是否上傳
# 關於本地存儲方案又很多的選擇,筆者此處選用mysql
try:
#獲取一個數據庫連接,注意如果是UTF-8類型的,需要制定數據庫
conn = pymysql.connect(host='localhost',user='root',passwd='123456',db='數據庫名',port=3306,charset='utf8')
cur = conn.cursor() #獲取一個游標
cur.execute('select imgName from yunImgs')
datas = cur.fetchall()
data = []
for values in datas:
data.append(values[0])
client = uploadImg()
imgsDir = sys.path[0] + "/imgs"
fileNames = os.listdir(imgsDir)
upCount = 0
for file_name in fileNames:
if file_name == ".DS_Store" or file_name in data:
continue
try:
filePath = imgsDir + "/" + file_name
sql = "insert into yunImgs(imgName) values('" + file_name + "')"
cur.execute(sql)
conn.commit()
client.put_object(bucket, file_name, open(filePath, "rb"))
print(file_name,"上傳完成")
upCount += 1
except Exception as e:
print(file_name + "上傳出錯: " + e)
conn.rollback()
cur.close() #關閉游標
conn.close() #釋放數據庫資源
print("圖片上傳完畢:新上傳", str(upCount), "張圖片")
except Exception as e :
print("上傳出錯: " + e)
- 一鍵上傳圖片
利用上述代碼生成python腳本,上傳時只需執行此文件即可。
為方便執行腳本,筆者提出3種較為簡單的執行思路
如有不正確之處望之處,謝謝