python操作阿里雲oss

這次的案例是利用阿里雲oss2進行簡單的bucket查詢以及上傳下載等基礎操作

  1. 對象存儲
    對象存儲的概念我就不做太多概述了,詳情可以參考阿里雲
  2. sdk
    python的sdk不僅提供對文件的處理,包括其它內容比如圖片也有很好的支持,可以實現對圖片在線縮放、水印等一系列操作,詳情可參考官方圖片處理文檔
  3. 文件處理代碼
# -*- coding: utf-8 -*
import oss2
import os



access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', 'your key')
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', 'your secret')
endpoint = os.getenv('OSS_TEST_ENDPOINT', 'http://oss-cn-beijing.aliyuncs.com')
path = os.path.abspath('.')
dir_path = os.path.abspath('dir')
dirs = os.listdir(path)


def showBucket():
    print("**********   獲取bucket信息  *******")
    service = oss2.Service(oss2.Auth(access_key_id, access_key_secret), endpoint)
    print("*****************************")
    print("     現有bucket有:      ")
    print('\n'.join(info.name for info in oss2.BucketIterator(service)))
    print("*****************************")


def createBucket():
    print("**********   創建  *******")
    bucket_input = input("請輸入想創建的bucket名:   ")
    # 創建Bucket對象,所有Object相關的接口都可以通過Bucket對象來進行
    bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name=bucket_input)

    # 帶權限與存儲類型創建bucket
    bucket.create_bucket(permission=oss2.BUCKET_ACL_PRIVATE,
                         input=oss2.models.BucketCreateConfig(oss2.BUCKET_STORAGE_CLASS_STANDARD))
    if oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name=bucket_input):
        print("     成功創建%s" %bucket_input)
        showBucket()
    print("***************************")

def bucketInfo():
    print("**********   獲取bucket_info  *******")
    bucket_input = input('請輸入bucket名:   ')
    # 獲取bucket相關信息
    bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name=bucket_input)
    bucket_info = bucket.get_bucket_info()
    print("     bucket_info:")
    print(' name: ' + bucket_info.name)
    print(' storage class: ' + bucket_info.storage_class)
    print(' creation date: ' + bucket_info.creation_date)
    print("*******************************")

    print("*******************************")
    print("     bucket_stat:")
    bucket_stat = bucket.get_bucket_stat()
    print(' storage: ' + str(bucket_stat.storage_size_in_bytes))
    print(' object count: ' + str(bucket_stat.object_count))
    print(' multi part upload count: ' + str(bucket_stat.multi_part_upload_count))
    print("********************************")



def upload():
    print("**********   上傳  *******")
    bucket_input = input('請輸入要傳入的bucket名:   ')
    print("**************************")
    print("     當前目錄下所有文件:")
    for file in dirs:
        print(file)
    print("***************************")

    filename = input('請輸入要上傳的文件名: ')
    cloud_name = input('請輸入雲端文件名:   ')
    bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name=bucket_input)
    with open(oss2.to_unicode(filename), 'rb') as f:
        bucket.put_object(cloud_name, f)
    meta = bucket.get_object_meta(cloud_name)
    if meta:
        print("     上傳成功")
        print("     雲端所有文件:")
        for i in oss2.ObjectIterator(bucket):
            print(i.key)

    else:
        print("     上傳失敗")





def download():
    print("**********   下載  *******")
    bucket_input = input('請輸入bucket名:')
    bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name=bucket_input)
    print("     %s下有如下文件:" %bucket_input)
    for i in oss2.ObjectIterator(bucket):
        print(i.key)
    print("***************************")
    cloud_name = input('請輸入要下載的文件名:')
    file_name = input('請輸入保存至本地文件名:')
    bucket.get_object_to_file(cloud_name, file_name)
    print(file_name[4:])
    if file_name[4:] in os.listdir(dir_path):
        print("     成功下載%s" %cloud_name)
    print("**************************")
    print("     當前目錄下所有文件:")
    for file in os.listdir(dir_path):
        print(file)
    print("***************************")



def remove():
    print("**********   刪除  *******")
    bucket_input = input('請輸入bucket名:'  )
    bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name=bucket_input)
    print("     %s下有如下文件(刪除前):" % bucket_input)
    for i in oss2.ObjectIterator(bucket):
        print(i.key)
    print("***************************")
    file_name = input('請輸入要刪除的文件名:'  )

    # 刪除名爲motto.txt的Object
    bucket.delete_object(file_name)
    print("     成功刪除%s" %file_name)
    print("     %s下有如下文件(刪除後):" % bucket_input)
    for i in oss2.ObjectIterator(bucket):
        print(i.key)

def main():
    print("************************")
    print("     「指令數字」:")
    print("0. 獲取bucket信息")
    print("1. 查看具體bucket信息")
    print("2. 創建bucket")
    print("3. 上傳文件")
    print("4. 下載文件")
    print("5. 刪除文件")
    print("6. 退出")
    print("************************")
    while 1:
        num = int(input('請輸入指令數:'))
        if num == 0:
            showBucket()
        elif num == 1:
            bucketInfo()
        elif num == 2:
            createBucket()
        elif num == 3:
            upload()
        elif num == 4:
            download()
        elif num == 5:
            remove()
        else:
            break



if __name__ == '__main__':
    main()
  • 這裏是小編用python3實現的簡單功能,具體細節大家看註釋應該都能理解,主要是對上傳下載地址路徑的板塊可以詳細注意一下,小編當時也有點混亂,所以專門用了測試文件來調試這版塊的內容,大家也可以參考一下,github裏面有其他版本的代碼,歡迎參考、建議
  • 如果內容中有疑問歡迎留言或者參考:
    1. oss2 package
    2. API文檔
    3. 我的Github
    4. 官方Github示例
    5. python_sdk
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章