Python玩轉阿里雲OSS對象存儲,批量轉存markdown和html圖片

今天我又在玩本身的博客了,偶然發現我從語雀批量導入的文章,在手機端圖片只顯示一部分,懷疑是網站防盜鏈,因而想把圖片所有轉移到個人阿里雲對象存儲裏面。python

可是找了半天都找不到現成的工具和代碼,無奈只能本身寫一個了,感興趣請看個人 github https://github.com/pzqu/picture_urls_to_ossmysql

涉及Python知識點:git

  1. 文件的寫入寫出
  2. 正則替換和查找
  3. 隨機生成不重複的uuid
  4. 阿里雲oss包
  5. 下載Url資源

簡單知識點:github

  1. 循環

對象存儲?

想要建站最好把圖片存儲在對象存儲裏,而後開cdn加速,這樣不只能夠減輕本身服務器的存儲壓力,同時阿里/騰訊會用他們的服務器和技術讓你的圖片加載的速度飛快,輕易不會產生數據丟失。web

阿里雲: https://www.aliyun.com/ 騰訊雲:https://cloud.tencent.com/sql

找到對象存儲,申請便可,拿到訪問密碼信息。數據庫

核心代碼講解

由於wordpress的博客文章是存儲的mysql數據庫裏的服務器

  1. 只要導出sql腳本
  2. 找到文件裏的全部匹配的url,把圖片下載下來
  3. 再上傳到oss
  4. 最後替換sql文件,再導入回去就好了

獲取匹配的url

讀取文件,把匹配的url拿到markdown

f_obj = open(file_name, 'r+', encoding="utf-8")
contents = f_obj.read()

reg = re.compile('\(https://cdn\.nlark\.com/yuque.*?\)')
url_markdown = reg.findall(contents)

用字典存起來

把拿到的url看成key存到dictdom

for i in url_markdown:
        img_dic[i[1:-1]] = {
            "img": "",
            "oss": ""
        }

下載圖片

def download_img(pic_url):
    name = get_random_pic_name(pic_url)
    r = requests.get(pic_url, stream=True)
    f = open(img_dic_path + "/" + name, "wb")
    for chunk in r.iter_content(chunk_size=512):
        if chunk:
            f.write(chunk)
    return img_dic_path + "/" + name

上傳圖片到對象存儲

def oss_upload(upload_path, src_path):
    auth = oss2.Auth(AccessKeyID, AccessKeySecret)
    bucket = oss2.Bucket(auth, EndPoint, BucketName)
    bucket.put_object_from_file(upload_path, src_path)

替換文件中的老url

def alter(file, old_str, new_str):
    with open(file, "r", encoding="utf-8") as f1, open("%s.bak" % file, "w", encoding="utf-8") as f2:
        for line in f1:
            f2.write(re.sub(old_str, new_str, line))
    os.remove(file)
    os.rename("%s.bak" % file, file)

比較蛋疼的是寫完才發現,是手機端不支持webp格式的圖片,明天再看吧。

本文由博客一文多發平臺 OpenWrite 發佈!

相關文章
相關標籤/搜索