华为云 OBS 用 Python SDK 上传下载文件实践

举报
yd_285284254 发表于 2026/10/27 14:49:31 2026/10/27
【摘要】 一、背景对象存储服务 OBS 是华为云上最常用的存储产品之一,适合存放图片、日志、备份和静态资源。日常开发中,我们经常需要用脚本批量上传文件或下载结果,本文记录使用官方 Python SDK(包名 esdk-obs-python)完成上传、下载、列举和删除的完整过程,以及我踩过的几个坑。二、准备工作1. 在 OBS 控制台创建一个桶,记下桶名和所在区域(例如 cn-north-4),对应的终...

一、背景

对象存储服务 OBS 是华为云上最常用的存储产品之一,适合存放图片、日志、备份和静态资源。日常开发中,我们经常需要用脚本批量上传文件或下载结果,本文记录使用官方 Python SDK(包名 esdk-obs-python)完成上传、下载、列举和删除的完整过程,以及我踩过的几个坑。

二、准备工作

1. 在 OBS 控制台创建一个桶,记下桶名和所在区域(例如 cn-north-4),对应的终端节点形如 obs.cn-north-4.myhuaweicloud.com。

2. 使用 IAM 子账号并仅授予 OBS 相关权限,不要用主账号的访问密钥。已有的 AK/SK 通过环境变量传入,千万不要写进代码或提交到仓库。

3. 安装 SDK:pip install esdk-obs-python,建议 Python 3.7 以上版本。

三、初始化客户端

先在终端设置环境变量 OBS_AK、OBS_SK,然后在代码中读取。核心代码如下:from obs import ObsClient;import os;client = ObsClient(access_key_id=os.environ["OBS_AK"], secret_access_key=os.environ["OBS_SK"], server="https://obs.cn-north-4.myhuaweicloud.com")。注意 server 必须与桶所在区域一致,否则会返回 301 或 403 之类的错误。

四、上传文件

最常用的是 putFile:resp = client.putFile("my-bucket", "docs/report.txt", "/tmp/report.txt")。判断是否成功要看 resp.status,小于 300 表示成功,否则打印 resp.errorCode 和 resp.errorMessage 排查。

对于超过 100MB 的大文件,建议使用分段上传接口 uploadFile,例如:client.uploadFile("my-bucket", "backup/big.zip", "/data/big.zip", partSize=10*1024*1024, taskNum=5, enableCheckpoint=True)。开启 enableCheckpoint 后,网络中断时可以断点续传,重新执行同一段代码即可从上次进度继续,非常实用。

五、下载文件

下载使用 getObject,把 downloadPath 指定为本地路径即可:resp = client.getObject("my-bucket", "docs/report.txt", downloadPath="/tmp/report_copy.txt")。大文件同样可以用 downloadFile 做断点续传下载:client.downloadFile("my-bucket", "backup/big.zip", downloadFile="/data/big_copy.zip", partSize=10*1024*1024, taskNum=5, enableCheckpoint=True)。

六、列举与删除

列举某个前缀下的对象用 listObjects,传入 prefix="docs/" 和 max_keys=100,返回结果在 resp.body.contents 中,每个元素有 key 和 size 属性。需要分页时读取 resp.body.next_marker 作为下一次请求的 marker 参数。删除使用 deleteObject,批量删除用 deleteObjects。

七、踩坑总结

1. 区域与终端节点不一致会导致请求失败,第一步先核对区域。

2. 使用完客户端务必调用 client.close() 释放连接,脚本中可以放在 finally 里。

3. 对象键不要以斜杠开头,用斜杠分隔即可模拟目录结构。

4. 上传后如果要给外部访问,请优先使用临时授权访问(createSignedUrl,设置较短有效期),而不是把桶设为公共读。

5. 生产环境建议开启服务端加密与版本控制,防止误删覆盖。

八、小结

通过 esdk-obs-python,只需十几行代码就能完成 OBS 的上传、下载、列举和删除,再配合断点续传和临时授权,基本可以满足日常脚本和备份需求。后续我打算继续研究生命周期规则,把过期日志自动转冷存储以节省费用,有进展再和大家分享。如有疑问欢迎在评论区交流。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。