Skip to main content

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 - 无效的访问密钥ID
  • SignatureDoesNotMatch - 签名不匹配
  • 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


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)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zuadoss-1.0.0-py3-none-any.whl (18.5 kB view details)

Uploaded Python 3

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

Hashes for zuadoss-1.0.0.tar.gz
Algorithm Hash digest
SHA256 6530280cdd7e8338a1fd6bb1e079dc00d49da15b31a98812db48f0471794a532
MD5 a71aa96e8374480d24a19d4712120478
BLAKE2b-256 5c2df9db1532ee4d8004704128303cf4f9843ca8fbde5612e27784bf0c5fd6e6

See more details on using hashes here.

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

Hashes for zuadoss-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c1a8105d422bf2b5819d28b361e6cb7fda9fc7f5007252f166a2c324fca44243
MD5 84a75d084218d369feae66152d2bbd0f
BLAKE2b-256 5cfe36526be6bb5fc5d24a61d54f26e994a868ec76b43eb61355540be0fdafe8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page