用OBS打造HarmonyOS个人云相册:Header签名与逐文件备份实战
手机里的照片越攒越多,换手机、清空间、误删都让人头疼。本文记录我用 HarmonyOS 加华为云对象存储 OBS 搭建个人云相册的实战做法:端侧用 ArkTS 写一个极简相册,云侧只用一个 OBS 桶做存储,上传走 Header 签名,备份按文件逐个推进,断网也不怕丢进度。
一、整体思路:端侧轻,云侧只存对象
相册只有三件事:选图、上传、浏览。端侧不保存任何账号密码,只负责挑文件、算签名、发请求;OBS 负责存图和按 Key 取图。照片按拍摄日期分目录存放,Key 的形式是 photos/2026/11/11/xxx.jpg,这样在控制台一眼就能按时间翻到想要的照片,也方便以后按前缀批量清理或迁移。相册列表不需要数据库,打开时直接按前缀列出对象,按时间倒序展示即可,简单可靠。
二、Header 签名:把密钥留在发布包之外
直接把访问密钥写进 App 是最常见的错误。我的做法是把签名过程拆开:端侧只拼请求要素,签名用的密钥只保存在开发机本地的配置文件里,发布包里不出现真实密钥。每次上传前,端侧按规范拼出待签字符串,包括 HTTP 方法、Content-Type、日期头和规范化后的资源路径,再用密钥做 HMAC 摘要,把结果放到 Authorization 头里发出去。服务端收到请求后用同一套规则验算签名,对不上就直接拒绝。这样即使请求被抓包,攻击者也拿不到密钥本身;即使密钥泄露,换一对密钥重新配置即可恢复,不用改 App 逻辑。
三、逐文件备份:一次只传一张,进度可恢复
备份最怕中途断网后从头再来。我的策略是一次只传一张,每成功一张就在本地记一条已完成记录,键是文件的本地路径加大小和修改时间。进度界面只显示三类状态:待备份、备份中、已完成。下次打开 App,先比对本地记录,只传还没完成的文件,断点续传天然就有了。上传失败时按文件重试,不阻塞后面的文件;连续失败三次的,标记为待手动处理,避免在弱网下反复空转耗电。
四、缓存与浏览体验
浏览体验的关键是缓存。列表页只加载缩略图,点开详情才加载原图;缩略图按固定宽度生成一份,存在单独的前缀下,避免每次都下载几 MB 的原图。端侧用一个有限大小的磁盘缓存存放最近浏览过的缩略图,超出上限时按最久未使用清理。这样在地铁等弱网环境下,翻看已经看过的照片基本不消耗流量。相册还支持按日期分组折叠,找某一天的照片时不用一直向下翻。
五、踩过的坑
第一个坑是时间偏差。签名里用的日期必须和服务端时间接近,手机时间偏差超过几分钟就会验签失败,排查时先看手机时间是否自动同步。第二个坑是文件名含中文和空格,Key 里的特殊字符要做规范化处理,否则会出现能上传却列不出来的怪现象。第三个坑是大图直传:超过 10MB 的照片先在端侧压到合理尺寸再传,既省流量,上传成功率也高,原图只在用户明确选择原图备份时才上传。
六、小结
个人云相册不需要复杂的后端,一个 OBS 桶加 Header 签名就能跑起来。关键点有三个:密钥决不进发布包,备份按文件逐个推进并记录进度,浏览靠缩略图加有限缓存。这套做法代码量不大,却覆盖了安全、断点续传和弱网体验三个最容易翻车的地方,适合作为 HarmonyOS 练手项目,也能长期用下去。
- 点赞
- 收藏
- 关注作者
评论(0)