鸿蒙云相册小实践:用 OBS 存照片,在 AI DevSpace 里问清签名算法

举报
yd_225942062 发表于 2026/11/07 22:34:30 2026/11/07
【摘要】 今天在鸿蒙开发实践中心做了一个新案例《用OBS打造个人云相册app》,核心是把照片和视频从手机图库备份到华为云 OBS,再在云端查看。做完又把同一个问题带到 AI DevSpace 问了一遍,记一下要点。 一、案例是做什么的用 HarmonyOS + 华为云 OBS 做一个个人云相册 app:从本地图库选照片和视频,经 OBS Header 签名逐文件备份到自己的桶,再在云端列表和网格里看缩...

今天在鸿蒙开发实践中心做了一个新案例《用OBS打造个人云相册app》,核心是把照片和视频从手机图库备份到华为云 OBS,再在云端查看。做完又把同一个问题带到 AI DevSpace 问了一遍,记一下要点。

一、案例是做什么的

用 HarmonyOS + 华为云 OBS 做一个个人云相册 app:从本地图库选照片和视频,经 OBS Header 签名逐文件备份到自己的桶,再在云端列表和网格里看缩略图、对象详情与预览。

案例给的关键信息很清楚:

  • 核心是 OBS Header 签名:用 HMAC-SHA1 计算签名,拼出 Authorization: OBS AK:Signature 请求头;
  • 逐文件备份,带备份记录,支持取消;云端预览走认证 GET;
  • 前置条件:在线开发环境要具备 API 26 构建工具链、需要支持 API 26 的云手机、自己创建私有 OBS 桶,并取得 AK、SK、Endpoint、桶名四项配置;
  • 限制:单文件上传和预览上限 64 MiB,云预览磁盘缓存上限 128 MiB,缩略图最多 64 张;
  • 案例公仓在 GitCode 的 harmony-practice-center 组织下。

二、云端实践怎么走

在案例页点「云端实践」,会新开一个 AI 开发者空间工作区,项目创建弹窗已经预填好案例名和案例公仓地址,点创建即可;创建完成后确认工作区里能看到 build-profile.json5 和 entry 目录。

然后按案例给的提示词,让鸿蒙开发智能体检查 API 26 SDK、依赖和构建工具,并编译 entry HAP。过程中遇到一个小插曲:刚进工作区时 CodeArts CLI 报了一次错,提示 opencode.db 异常,正在自动恢复,恢复后自动重连,不用干预。

三、在 AI DevSpace 里问同一个签名问题

我又在 AI DevSpace 的体验版(免费,不消耗额度)里开了 AI Shell,问了案例的核心问题:

请解释在 HarmonyOS ArkTS 中如何为华为云 OBS 请求构造 Header 签名(HMAC-SHA1),并给出一个简短的代码示例。

它先尝试联网检索,遇到一次 429 限流,随即改用 webfetch 直接抓华为云 OBS 官方文档(Header 签名接口说明),确认了完整步骤。按我的理解,签名的关键步骤是:

  1. 拼 CanonicalizedHeaders:只取 x-obs-* 头域,头域名全小写、按字典序排列,拼成 key:value 加换行;
  2. 拼 StringToSign:方法、内容头、规范化头域和规范化资源按六部分用换行连接;
  3. 用 SK 对 StringToSign 做 HMAC-SHA1,再 Base64 编码得到 Signature,拼成 OBS AK:Signature 放进 Authorization 头;
  4. 发 HTTP 请求。

容易踩的坑(对照官方文档):

  • Date 必须是 RFC 1123 GMT 格式,new Date().toUTCString() 正好是这个格式;服务端校验时间差不超过 15 分钟,设备时间不对会直接 403;
  • 用 x-obs-date 时,StringToSign 里的 Date 那行必须留空,但 x-obs-date 本身要出现在 CanonicalizedHeaders 中;
  • 头域名必须全小写(x-obs-acl 不能写成 X-Obs-Acl),但头域值保持原样;
  • crypto API 要注意版本:createSymKeyGenerator(‘AES256’) 要求密钥恰好 32 字节,而 OBS 的 SK 通常是 40 字符;如果所用 SDK 提供了 cryptoFramework.createHmac,建议改用那个接口,使用前对照所用 HarmonyOS API 版本的官方文档核实。

之后我又追问了一次,让它把签名逻辑整理成可复用的 ObsSigner 工具类,并给出 PUT 上传对象到 OBS 的完整调用示例(含 Content-Type 和 x-obs-acl 头域),它给出了完整的工具类和示例代码。

四、小结

鸿蒙实践中心的案例把前置条件、完成标志、验收标准和排障表都写在了页面上,照着走不容易跑偏;AI DevSpace 的 AI Shell 在联网检索受限时会自动换抓官方文档,回答有据可查。下一步准备把签名工具类用到自己的小项目里,先从 PUT 上传一张照片开始验证。提醒一句:AK、SK 不要写进代码,也不要提交到公开仓库。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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