Typora+MinIO+Python程式碼打造舒適協作環境

IT王小二發表於2023-05-05

作者:IT王小二

部落格:https://itwxe.com

不知不覺大半年沒更新了...前面小二介紹過使用Typora+MinIO+Java程式碼打造舒適寫作環境,然後有很多大佬啊,說用Java來實現簡直是殺雞用上牛刀,小二想了想,確實有點...正好小二最近在學習Python,所以我們們就改用Python實現一版。

安裝MinIO

安裝參考MinIO官網,或者參考小二的部落格,搜尋關鍵詞 → Linux安裝MinIO

安裝完成之後使用域名對映好後臺服務,小二使用nginx配置域名,配置參考如下。

    server {
        listen 443 ssl;
        server_name minio.itwxe.com;
        include /usr/local/nginx/conf/conf.d/common.conf;
        access_log logs/minioAccess.log;

        location / {
            proxy_pass http://127.0.0.1:9000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

    server {
        listen 443 ssl;
        server_name minio-console.itwxe.com;
        include /usr/local/nginx/conf/conf.d/common.conf;
        access_log logs/minioAccess.log;

        location / {
            proxy_pass http://127.0.0.1:9020;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

其中common.conf為域名通用配置。

        ssl_certificate /usr/local/nginx/ssl/fullchain.crt;
        ssl_certificate_key /usr/local/nginx/ssl/itwxe.com.key;
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout 30m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers HIGH:!aNULL:!MD5:!EXPORT56:!EXP;
        ssl_prefer_server_ciphers on;
        proxy_connect_timeout 500;
        proxy_send_timeout 500;
        proxy_read_timeout 500;
        client_max_body_size 100m;

配置好之後訪問https://minio-console.itwxe.com即可訪問後臺。

同時為了儲存桶圖片所有人可以訪問,需要將儲存桶設定為公開。

設定儲存桶為public

Python程式碼實現上傳

首先,小二作為一個半吊子Python學習者,看了下MinIO官網提供的SDK範例。

安裝依賴。

pip install minio

官網示例程式碼。

from minio import Minio
from minio.error import S3Error


def main():
    # Create a client with the MinIO server playground, its access key
    # and secret key.
    client = Minio(
        "play.min.io",
        access_key="Q3AM3UQ867SPQQA43P2F",
        secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
    )

    # Make 'asiatrip' bucket if not exist.
    found = client.bucket_exists("asiatrip")
    if not found:
        client.make_bucket("asiatrip")
    else:
        print("Bucket 'asiatrip' already exists")

    # Upload '/home/user/Photos/asiaphotos.zip' as object name
    # 'asiaphotos-2015.zip' to bucket 'asiatrip'.
    client.fput_object(
        "asiatrip", "asiaphotos-2015.zip", "/home/user/Photos/asiaphotos.zip",
    )
    print(
        "'/home/user/Photos/asiaphotos.zip' is successfully uploaded as "
        "object 'asiaphotos-2015.zip' to bucket 'asiatrip'."
    )


if __name__ == "__main__":
    try:
        main()
    except S3Error as exc:
        print("error occurred.", exc)

於是乎,小二開始依葫蘆畫瓢,程式碼如下。

import sys
import time
from pathlib import Path
import random
from minio import Minio

minio_domain = 'minio.itwxe.com'
minio_access_key = '你的賬號名稱'
minio_secret_key = '你的密碼'
# 儲存桶名稱
bucket_name = 'img'
# 儲存桶子資料夾名稱
bucket_name_dir_name = 'blog'

# 獲取minio客戶端連線
minio_client = Minio(minio_domain, minio_access_key, minio_secret_key)

if not minio_client.bucket_exists(bucket_name):
    # 如果儲存桶不存在,則建立
    minio_client.make_bucket(bucket_name)

# 獲取圖片引數
images = sys.argv[1:]

for image in images:
    # 檔案字尾
    suffix = Path(image).suffix
    # 自定義檔名,使用13位時間戳+2位隨機數
    file_name = '{}{}{}'.format(round(time.time() * 1000), random.randint(10, 99), suffix)
    # 檔案儲存桶下子路徑拼接
    remote_full_path_name = '{}/{}'.format(bucket_name_dir_name, file_name)
    # 上傳檔案
    minio_client.fput_object(bucket_name, remote_full_path_name, image)
    # 列印檔案路徑
    print("https://minio.itwxe.com/{}/{}".format(bucket_name, remote_full_path_name))

寫完之後小二不禁感慨,確實比Java簡單億點點,設定一下typora,python 你的python檔案位置

image-20230504223443595

這張圖片就是上傳後的路徑結果啦,在此,小二也祝願大家可以愉快的寫作。

相關文章