对象存储的三个硬约束:从鸿蒙 OBS 云相册案例看签名、取消与分段
。案例中心新上了一个「用OBS打造个人云相册app」,鸿蒙端侧配华为云 OBS,120 分钟。它没有走端云一体那套云函数,而是让端侧直接对 OBS 发请求,自己算 Header 签名。这条路看着原始,但把对象存储的几个硬约束都摆到了明面上,做完能省掉以后一堆排查。
一、签名是端侧自己算的,不是 SDK 代劳
案例写明用 HMAC-SHA1 计算签名、构造 Authorization 请求头。这一步的意义在于:签名算法、待签字符串的拼法、时间戳的有效期全靠自己对齐,任何一处空格或换行不一致都会返回 403。很多人在这一步卡住,是因为把签名当成黑盒,出错了看不到中间值。做法上建议把待签字符串先打日志对上,再谈上传。
二、逐文件上传,进度和取消得自己实现
案例的做法是筛选、多选或整批备份待备份文件,显示每个文件的进度,并支持取消。这意味着上传不是一个 request 就完事,而要按文件排队、逐个推进、留出取消的口子。这里最容易埋的坑是取消后的状态:文件已经传了一半,桶里可能留下不完整对象,重试时就会重复。案例把「上传与去重」列进了拓展任务的提示里,说明这一层要单独验。
三、大文件才需要分段,小文件别提前复杂化
案例把「分段上传超过 64 MiB 的家庭视频」放到拓展实践,主流程走普通上传。这是个好的取舍:分段上传要处理分片编号、ETag 收集、合并请求和失败重传,复杂度陡增;日常照片几 MB,普通上传足够。先按文件大小分流,再用一条阈值把两类路径分开,比一开始就全量分段稳。
四、云端查看要区分「列举」和「取内容」
云端列表和网格展示缩略图,靠的是列举对象拿到 key 与元数据;点开预览才走认证 GET 取内容。这两件事分开做的好处是列表页不会因为拉原图而变慢,也避免给每个缩略图都发一次签名请求。案例把对象详情和预览放在一起讲,实际实现时建议先只做列表,再加预览。
五、验收标准要写死
案例给的三条很具体:一个支持 API 26 的相册云备份应用、OBS Header 签名与逐文件上传流程跑通、备份记录与云端图片视频预览可用。拓展任务还给验收口径,比如「合并对象可读取,失败或取消有明确处理结果」「时区明确,空态正确」。最后一条常被忽略——云相册时间轴按上传时间分组,时区没定好,同一天的照片会被分到两天。
六、什么时候该用 OBS、什么时候该用云函数
这个案例和之前写的记账本、单词打卡不同:那些把业务逻辑收口到云函数,端侧只带公开项目 ID;这个案例端侧直接签名访问对象存储,因为没有业务校验需求,只有存和取。判断标准是——如果数据是「用户自己的文件」,权限靠桶策略和签名控制,端侧直连最简单;如果要做跨用户聚合、业务校验,才需要中间那层函数。混着来往往两头都不干净。
一句话:这个案例真正的教学点是让对象存储的三个硬约束显形——签名要自己拼对、上传要能取消能去重、大文件才分段。把这三条做扎实,换成别的云存储也照用。
- 点赞
- 收藏
- 关注作者
评论(0)