這次的案例是利用阿里云oss2進(jìn)行簡單的bucket查詢以及上傳下載等基礎(chǔ)操作
- 對象存儲
對象存儲的概念我就不做太多概述了,詳情可以參考阿里云 - sdk
python的sdk不僅提供對文件的處理丹允,包括其它內(nèi)容比如圖片也有很好的支持锻梳,可以實現(xiàn)對圖片在線縮放、水印等一系列操作咐熙,詳情可參考官方圖片處理文檔 - 文件處理代碼
# -*- 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(" 現(xiàn)有bucket有: ")
print('\n'.join(info.name for info in oss2.BucketIterator(service)))
print("*****************************")
def createBucket():
print("********** 創(chuàng)建 *******")
bucket_input = input("請輸入想創(chuàng)建的bucket名: ")
# 創(chuàng)建Bucket對象,所有Object相關(guān)的接口都可以通過Bucket對象來進(jìn)行
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name=bucket_input)
# 帶權(quán)限與存儲類型創(chuàng)建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(" 成功創(chuàng)建%s" %bucket_input)
showBucket()
print("***************************")
def bucketInfo():
print("********** 獲取bucket_info *******")
bucket_input = input('請輸入bucket名: ')
# 獲取bucket相關(guān)信息
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(" 當(dāng)前目錄下所有文件:")
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(" 當(dāng)前目錄下所有文件:")
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(" 「指令數(shù)字」:")
print("0. 獲取bucket信息")
print("1. 查看具體bucket信息")
print("2. 創(chuàng)建bucket")
print("3. 上傳文件")
print("4. 下載文件")
print("5. 刪除文件")
print("6. 退出")
print("************************")
while 1:
num = int(input('請輸入指令數(shù):'))
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實現(xiàn)的簡單功能射亏,具體細(xì)節(jié)大家看注釋應(yīng)該都能理解命斧,主要是對上傳下載地址路徑的板塊可以詳細(xì)注意一下田晚,小編當(dāng)時也有點(diǎn)混亂,所以專門用了測試文件來調(diào)試這版塊的內(nèi)容国葬,大家也可以參考一下贤徒,github里面有其他版本的代碼,歡迎參考汇四、建議
- 如果內(nèi)容中有疑問歡迎留言或者參考: