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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容