ZUAD OSS Python SDK - 兼容OSS接口的对象存储Python客户端SDK
Project description
ZUAD OSS Python SDK
🚀 ZUAD OSS Python SDK 是一个兼容OSS接口的对象存储Python客户端SDK,为ZUAD OSS服务提供完整的Python API支持。
✨ 特性
- 🔄 完全兼容OSS SDK接口 - 无缝迁移,零学习成本
- 📦 完整的对象存储功能 - 支持上传、下载、删除、列举等所有基本操作
- 🔧 分片上传支持 - 支持大文件的分片上传和断点续传
- 🔐 安全认证 - 支持访问密钥认证和预签名URL
- 📊 丰富的元数据支持 - 支持自定义HTTP头部和对象元数据
- 🌐 HTTP范围请求 - 支持部分内容下载
- 🛡️ 完善的异常处理 - 详细的错误信息和异常类型
- 📝 类型提示支持 - 完整的类型注解,IDE友好
📦 安装
# 从源码安装
git clone <repository-url>
cd zuadoss
pip install -e .
# 或者直接安装依赖
pip install requests
🚀 快速开始
基本使用
import zuadoss
from zuadoss import Auth, Bucket
# 初始化OSS客户端(兼容标准OSS接口)
auth = Auth('your_access_key_id', 'your_access_key_secret')
bucket = Bucket(auth, 'http://localhost:8000', 'your-bucket-name')
# 创建存储桶
bucket.create_bucket(permission='private')
# 上传对象
result = bucket.put_object('test.txt', 'Hello, ZUAD OSS!')
print(f"上传成功,ETag: {result.etag}")
# 从本地文件上传(兼容标准OSS接口)
result = bucket.put_object_from_file('upload.txt', '/path/to/local/file.txt')
print(f"文件上传成功,ETag: {result.etag}")
# 下载对象
obj = bucket.get_object('test.txt')
content = obj.content.decode('utf-8')
print(f"下载内容: {content}")
# 列举对象
objects = bucket.list_objects()
for obj in objects.object_list:
print(f"对象: {obj.key}, 大小: {obj.size}")
# 删除对象
bucket.delete_object('test.txt')
高级功能
# 带自定义头部的上传
headers = {
'Content-Type': 'text/plain; charset=utf-8',
'x-oss-meta-author': 'ZUAD OSS Team',
'x-oss-meta-description': '自定义元数据'
}
bucket.put_object('custom.txt', '内容', headers=headers)
# 范围下载
obj = bucket.get_object('large-file.txt', byte_range=(0, 1023)) # 下载前1KB
# 分片上传
upload_result = bucket.init_multipart_upload('large-file.txt')
upload_id = upload_result.upload_id
# 上传分片
parts = []
for i, chunk in enumerate(file_chunks, 1):
part_result = bucket.upload_part('large-file.txt', upload_id, i, chunk)
parts.append(zuadoss.PartInfo(part_number=i, etag=part_result.etag))
# 完成分片上传
bucket.complete_multipart_upload('large-file.txt', upload_id, parts)
# 生成预签名URL
import time
expires = int(time.time()) + 3600 # 1小时后过期
signed_url = bucket.sign_url('GET', 'test.txt', expires)
📚 API 参考
Auth 类
auth = Auth(access_key_id, access_key_secret)
认证类,用于生成请求签名。
Bucket 类
bucket = Bucket(auth, endpoint, bucket_name, is_cname=False)
存储桶操作类,提供所有对象存储功能。
存储桶操作
create_bucket(permission='private')- 创建存储桶delete_bucket()- 删除存储桶bucket_exists()- 检查存储桶是否存在get_bucket_info()- 获取存储桶信息
对象操作
put_object(key, data, headers=None)- 上传对象put_object_from_file(key, filename, headers=None)- 从本地文件上传对象get_object(key, byte_range=None, headers=None)- 下载对象delete_object(key)- 删除对象object_exists(key)- 检查对象是否存在get_object_meta(key)- 获取对象元数据list_objects(prefix='', delimiter='', marker='', max_keys=1000)- 列举对象
分片上传
init_multipart_upload(key, headers=None)- 初始化分片上传upload_part(key, upload_id, part_number, data)- 上传分片complete_multipart_upload(key, upload_id, parts)- 完成分片上传abort_multipart_upload(key, upload_id)- 取消分片上传
其他功能
sign_url(method, key, expires, headers=None, params=None)- 生成预签名URL
🔧 配置选项
连接配置
bucket = Bucket(
auth=auth,
endpoint='http://localhost:8000',
bucket_name='my-bucket',
is_cname=False, # 是否使用CNAME
connect_timeout=60, # 连接超时时间(秒)
read_timeout=120 # 读取超时时间(秒)
)
自定义HTTP会话
import requests
session = requests.Session()
session.proxies = {'http': 'http://proxy:8080'}
bucket = Bucket(auth, endpoint, bucket_name, session=session)
🛡️ 异常处理
SDK提供了完善的异常处理机制:
try:
bucket.get_object('non-existent-key')
except zuadoss.NoSuchKey as e:
print(f"对象不存在: {e.key}")
except zuadoss.AccessDenied as e:
print(f"访问被拒绝: {e.message}")
except zuadoss.ZuadOSSError as e:
print(f"OSS错误: {e.error_code} - {e.message}")
print(f"状态码: {e.status_code}")
print(f"请求ID: {e.request_id}")
异常类型
ZuadOSSError- 基础异常类NoSuchBucket- 存储桶不存在NoSuchKey- 对象不存在AccessDenied- 访问被拒绝InvalidAccessKeyId- 无效的访问密钥IDSignatureDoesNotMatch- 签名不匹配BucketAlreadyExists- 存储桶已存在BucketNotEmpty- 存储桶非空NetworkError- 网络错误ServerError- 服务器错误
🔄 从阿里云OSS迁移
ZUAD OSS SDK与阿里云OSS SDK接口完全兼容,迁移只需要修改导入和初始化:
# 阿里云OSS
import oss2
auth = oss2.Auth(access_key_id, access_key_secret)
bucket = oss2.Bucket(auth, endpoint, bucket_name)
# ZUAD OSS
import zuadoss
auth = zuadoss.Auth(access_key_id, access_key_secret)
bucket = zuadoss.Bucket(auth, endpoint, bucket_name)
# 其他API调用完全相同!
📝 示例代码
查看 example.py 文件获取完整的使用示例。
🤝 贡献
欢迎提交Issue和Pull Request!
📄 许可证
MIT License
🔗 相关链接
ZUAD OSS - 企业级对象存储解决方案 🚀
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
zuadoss-1.0.0.tar.gz
(17.5 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
zuadoss-1.0.0-py3-none-any.whl
(18.5 kB
view details)
File details
Details for the file zuadoss-1.0.0.tar.gz.
File metadata
- Download URL: zuadoss-1.0.0.tar.gz
- Upload date:
- Size: 17.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6530280cdd7e8338a1fd6bb1e079dc00d49da15b31a98812db48f0471794a532
|
|
| MD5 |
a71aa96e8374480d24a19d4712120478
|
|
| BLAKE2b-256 |
5c2df9db1532ee4d8004704128303cf4f9843ca8fbde5612e27784bf0c5fd6e6
|
File details
Details for the file zuadoss-1.0.0-py3-none-any.whl.
File metadata
- Download URL: zuadoss-1.0.0-py3-none-any.whl
- Upload date:
- Size: 18.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1a8105d422bf2b5819d28b361e6cb7fda9fc7f5007252f166a2c324fca44243
|
|
| MD5 |
84a75d084218d369feae66152d2bbd0f
|
|
| BLAKE2b-256 |
5cfe36526be6bb5fc5d24a61d54f26e994a868ec76b43eb61355540be0fdafe8
|