Python(二)藉助七牛雲經過腳本自動獲取上傳圖片外鏈

概述

以前本身寫博客的時候,每次的都須要經過將本地圖片上傳到七牛雲,而後獲取圖片外鏈,再粘貼到MarkDown編輯器裏面,若是一篇博客裏面圖片比較少的時候,還能夠忍受,圖片多了就感受特別煩了,因此就上網查了一些資料,發現能夠經過拖拽自動上傳到服務器的,可是支持英文路徑,不支持中文,可是MarkDown裏面的圖片名稱基本上都是中文的,並且那個腳本是在python2.X上面是能夠拖拽的,可是在win10的python3.X上面就GG了,拖拽不了,最近恰好在學習python,就開始了踩坑之旅,其實我想實現的功能很簡單,大體以下:python

  • 打開目錄下的cmd命令
  • 將圖片路徑拖入cmd窗口
  • 回車,開始上傳文件
  • 上傳成功後會能夠在剪貼板跟文件中找到url

下面展現一下效果圖
git

markdowm演示
markdowm演示

正文

思路分析

咱們須要實現的功能大體分爲這幾步github

  • 從外部傳入圖片路徑
  • 獲取路徑並上傳
  • 上傳成功,而且寫入剪貼板跟記事本

大體的流程就是這個樣子,跟上一篇上傳到fir的思路差很少,下面一步一步來實現這個思路。json

七牛雲相關

註冊七牛雲帳號

因爲個人圖片都是存儲到七牛上面的,因此使用的七牛雲帳號,固然你用什麼騰訊雲或者leancloud也是OK的,這個都可有可無,數組

獲取相應的參數
  • AccessKey:登錄以後,在我的中心查看AK
  • SecretKey:登錄以後,在我的中心查看SK
  • BucketName:上傳的空間名,本身命名的,見下圖
  • UrlName:測試域名,見下圖

七牛雲.png
七牛雲.png

我建立了兩個空間,因此有兩個,一個fatchao,一個image, UrlName通常都是orbm62bsw.bkt.clouddn.com服務器

測試上傳接口

經過七牛雲的python文檔
,實際就是直接抄的文檔,下面可恥地貼一下代碼編輯器

# coding=utf-8
from qiniu import Auth, put_file

# 須要填寫你的 Access Key 和 Secret Key
access_key = 'AYUazkNdav9YBCLBe06Ohld7nnmC_4xgxH65KW7M'
secret_key = 'J5hXbMdRwrI6n1R1THqmJYJJ5gTXm3UpBG7BP6u6'
# 構建鑑權對象
q = Auth(access_key, secret_key)
# 要上傳的空間
bucket_name = 'fatchao'
# 上傳到七牛後保存的文件名
key = '入地.png'
# 生成上傳 Token,能夠指定過時時間等
token = q.upload_token(bucket_name, key, 3600)
# 要上傳文件的本地路徑
localfile = 'F:\Demo\python\Markdown\img.png'
info = put_file(token, key, localfile)
print(info)複製代碼
運行測試
{
    'hash': 'Foix8wzKdhbXjim7H3OLnP0fdwiJ',
    'key': '入地.png'
}
exception: None,
status_code: 200,
text_body: {
    "hash": "Foix8wzKdhbXjim7H3OLnP0fdwiJ",
    "key": "入地.png"
}複製代碼

上傳成功,下面來編寫一下完整的代碼學習

獲取圖片路徑
if __name__ == '__main__':
    q = Auth(access_key, secret_key)
    bucket = BucketManager(q)
    # 獲取傳過來的路徑數組
    imgUrls = sys.argv[1:]
    # 遍歷數組進行文件上傳
    for imgUrl in imgUrls:
        # 獲取文件名
        up_filename = os.path.split(imgUrl)[1]
        # 上傳圖片至七牛雲
        upload_img(bucket_name, up_filename, imgUrl)
        # 保存進系統剪貼板
        url_before_save = get_img_url(bucket_url, up_filename)
        addToClipBoard(url_before_save)
        # 寫進文本文件
        save_to_txt()複製代碼
複製進粘貼板
def addToClipBoard(text):
    command = 'echo ' + text.strip() + '| clip'
    os.system(command)複製代碼
寫入本地文件
def save_to_txt():
    # save md_url to txt
    with open(md_url_result, "a") as f:
        f.write(url_before_save)
    return複製代碼

總體測試

markdowm演示
markdowm演示

解決中文亂碼

須要在寫入文本的時候加上編碼方式,否則中文路徑會出現亂碼測試

def save_to_txt():
    # save md_url to txt
    with open(md_url_result, "a", encoding="utf-8") as f:
        f.write(url_before_save)
    return複製代碼

精簡文件名

咱們的文件名後面都有一個文件後綴,相似與.jpg,.png等,這些其實是不須要的,下面優化一下優化

def get_img_url(bucket_url, file_name):
    img_url = 'http://%s/%s' % (bucket_url, file_name)
    # generate md_url
    imageName = file_name.split('.')
    md_url = "![%s](%s)\n" % (imageName[0], img_url)
    return md_url複製代碼

待優化項

上面的效果圖基本上上已經簡化了一部分流程圖,可是每次都須要輸入python md.py 這幾個命令,仍是比較麻煩,有沒有辦法能夠在每次打開cmd窗口的時候就已經顯示了這幾行文字呢?咱們能夠把這幾行字寫在記事本中,固然應該又更好的辦法,能夠用.bat進行配置,只是如今對python還不是很熟,暫且先這樣,你們有什麼好的辦法的話,能夠提供一下。

源碼下載地址

相關文章
相關標籤/搜索