# -*- coding: utf-8 -*- |
|
|
|
import os |
|
import shutil |
|
|
|
import oss2 |
|
|
|
|
|
# 如下代碼展現了基本的文件上傳、下載、羅列、刪除用法。 |
|
|
|
|
|
# 首先初始化AccessKeyId、AccessKeySecret、Endpoint等信息。 |
|
# 經過環境變量獲取,或者把諸如「<你的AccessKeyId>」替換成真實的AccessKeyId等。 |
|
# |
|
# 以杭州區域爲例,Endpoint能夠是: |
|
# http://oss-cn-hangzhou.aliyuncs.com |
|
# https://oss-cn-hangzhou.aliyuncs.com |
|
# 分別以HTTP、HTTPS協議訪問。 |
|
access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', '<你的AccessKeyId>') |
|
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '<你的AccessKeySecret>') |
|
bucket_name = os.getenv('OSS_TEST_BUCKET', '<你的Bucket>') |
|
endpoint = os.getenv('OSS_TEST_ENDPOINT', '<你的訪問域名>') |
|
|
|
|
|
# 確認上面的參數都填寫正確了 |
|
for param in (access_key_id, access_key_secret, bucket_name, endpoint): |
|
assert '<' not in param, '請設置參數:' + param |
|
|
|
|
|
# 建立Bucket對象,全部Object相關的接口均可以經過Bucket對象來進行 |
|
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name) |
|
|
|
|
|
# 上傳一段字符串。Object名是motto.txt,內容是一段名言。 |
|
bucket.put_object('motto.txt', 'Never give up. - Jack Ma') |
|
|
|
# 獲取Object的metadata |
|
object_meta = bucket.get_object_meta('你的對象名') |
|
print('last modified: ' + object_meta.last_modified) |
|
print('etag: ' + object_meta.etag) |
|
print('size: ' + object_meta.content_length) |
|
|
|
# 下載到本地文件 |
|
bucket.get_object_to_file('motto.txt', '本地文件名.txt') |
|
|
|
|
|
# 把剛剛上傳的Object下載到本地文件 「座右銘.txt」 中 |
|
# 由於get_object()方法返回的是一個file-like object,因此咱們能夠直接用shutil.copyfileobj()作拷貝 |
|
with open(oss2.to_unicode('本地座右銘.txt'), 'wb') as f: |
|
shutil.copyfileobj(bucket.get_object('motto.txt'), f) |
|
|
|
|
|
# 把本地文件 「座右銘.txt」 上傳到OSS,新的Object叫作 「個人座右銘.txt」 |
|
# 注意到,此次put_object()的第二個參數是file object;而上次上傳是一個字符串。 |
|
# put_object()可以識別不一樣的參數類型 |
|
with open(oss2.to_unicode('本地座右銘.txt'), 'rb') as f: |
|
bucket.put_object('雲上座右銘.txt', f) |
|
|
|
|
|
# 上面兩行代碼,也能夠用下面的一行代碼來實現 |
|
bucket.put_object_from_file('雲上座右銘.txt', '本地座右銘.txt') |
|
|
|
|
|
# 列舉Bucket下10個Object,並打印它們的最後修改時間、文件名 |
|
for i, object_info in enumerate(oss2.ObjectIterator(bucket)): |
|
print("{0} {1}".format(object_info.last_modified, object_info.key)) |
|
|
|
if i >= 9: |
|
break |
|
|
|
|
|
# 刪除名爲motto.txt的Object |
|
bucket.delete_object('motto.txt') |
|
|
|
# 也能夠批量刪除 |
|
# 注意:重複刪除motto.txt,並不會報錯 |
|
bucket.batch_delete_objects(['motto.txt', '雲上座右銘.txt']) |
|
|
|
|
|
# 確認Object已經被刪除了 |
|
assert not bucket.object_exists('motto.txt') |
|
|
|
|
|
# 獲取不存在的文件會拋出oss2.exceptions.NoSuchKey異常 |
|
try: |
|
bucket.get_object('雲上座右銘.txt') |
|
except oss2.exceptions.NoSuchKey as e: |
|
print(u'已經被刪除了:request_id={0}'.format(e.request_id)) |
|
else: |
|
assert False |
|
|
|
# 清除本地文件 |
|
os.remove(u'本地文件名.txt') |
|
os.remove(u'本地座右銘.txt') |