鸿蒙云相册小实践:用 OBS 存照片,在 AI DevSpace 里问清签名算法
今天在鸿蒙开发实践中心做了一个新案例《用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 签名接口说明),确认了完整步骤。按我的理解,签名的关键步骤是:
- 拼 CanonicalizedHeaders:只取 x-obs-* 头域,头域名全小写、按字典序排列,拼成 key:value 加换行;
- 拼 StringToSign:方法、内容头、规范化头域和规范化资源按六部分用换行连接;
- 用 SK 对 StringToSign 做 HMAC-SHA1,再 Base64 编码得到 Signature,拼成 OBS AK:Signature 放进 Authorization 头;
- 发 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 不要写进代码,也不要提交到公开仓库。
- 点赞
- 收藏
- 关注作者
评论(0)