一、阿里云OSS API核心操作
1. 文件传输操作
1.1 小文件传输
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
import os
remote_key = sys.argv[1]
local_path = sys.argv[2]
auth = oss2.Auth('your_access_key_id', 'your_secret_access_key')
bucket = oss2.Bucket(auth, 'https://oss-accelerate.aliyuncs.com', 'example_bucket')
bucket.put_object_from_file(local_path, remote_key)
1.2 大文件分片传输
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
remote_key = sys.argv[1]
local_path = sys.argv[2]
auth = oss2.Auth('your_access_key_id', 'your_secret_access_key')
bucket = oss2.Bucket(auth, 'https://oss-accelerate.aliyuncs.com', 'example_bucket')
oss2.resumable_upload(bucket, remote_key, local_path, part_size=1024*1024*100)
2. 对象生命周期管理
import oss2
object_list = []
keep_count = 3
search_prefix = 'backup_logs/'
auth = oss2.Auth('your_access_key_id', 'your_secret_access_key')
bucket = oss2.Bucket(auth, 'https://oss-accelerate.aliyuncs.com', 'example_bucket')
for obj in oss2.ObjectIterator(bucket, prefix=search_prefix):
object_list.append(obj.key)
if len(object_list) > keep_count:
objects_to_delete = object_list[:-keep_count]
bucket.batch_delete_objects(objects_to_delete)
print('\n'.join(bucket.batch_delete_objects(objects_to_delete).deleted_keys))
3. 对象检索策略
3.1 基础目录遍历
import oss2
auth = oss2.Auth('your_access_key_id', 'your_secret_access_key')
bucket = oss2.Bucket(auth, 'https://oss-accelerate.aliyuncs.com', 'example_bucket')
for obj in oss2.ObjectIteratorV2(bucket, prefix='logs/', delimiter='/', start_after='logs/', fetch_owner=True):
if obj.is_prefix():
print(f'目录: {obj.key}')
else:
print(f'文件: {obj.key}')
print(f'拥有者: {obj.owner.display_name}({obj.owner.id})')
3.2 索引查询检索
import oss2
from oss2.models import MetaQuery, AggregationsRequest
auth = oss2.Auth('your_access_key_id', 'your_secret_access_key')
bucket = oss2.Bucket(auth, 'https://oss-accelerate.aliyuncs.com', 'example_bucket')
query_params = MetaQuery(
query='{"Field": "Filename","Value": "backup/","Operation": "prefix"}',
sort='FileModifiedTime',
order='asc'
)
result = bucket.do_bucket_meta_query(query_params)
print(type(result.files))
print(result.files[0].file_name)