用 OBS 打造鸿蒙个人云相册:端云一体图库的存储、上传与预览实践
手机里几年的照片,换机、清理空间时最容易丢。公有相册省心,但照片去向自己说了不算;移动硬盘要随身带、定期备份。自己搭一个私人云相册是个折中:照片存在自己的华为云 OBS 桶里,端侧用鸿蒙写一个图库应用,上传、浏览、删除走同一套约定,换设备登录就能继续看。
一、整体架构:端侧做体验,云侧做存储
相册分三层。端侧是图库界面:首页用网格排相册,按需加载,避免几百张图一次进内存;详情页左右滑动预览。云侧是 OBS:一个桶放原图,一个前缀放缩略图,对象按日期和相册分目录。端侧只存对象名和拍摄时间,不存图片本身。卸载重装后,按对象名重新拉取就能恢复相册,换机成本很低。
二、桶与对象命名:先定规则,再写代码
命名规则要第一天定死。推荐相册名/年-月/时间戳-随机串.扩展名,例如 family/2026-11/20261109-085512-a3f9.jpg。缩略图用同一对象名、加 thumb/ 前缀。列表页按前缀列举排序,详情页按对象名取原图,删除时原图和缩略图一起删,不留孤儿文件。桶设为私有读,访问全走临时签名链接。
三、上传:先选图,再分段,最后落库
上传分四步。选图用系统图片选择器,申请读图权限后拿到图片数据;先在端侧按 480 像素宽等比压缩,生成缩略图单独上传;再上传原图,弱网时做分段或断点续传,失败留重试入口;上传成功后,才把对象名、拍摄时间写进端侧索引,页面按索引渲染,而不是每次打开都去列举整个桶。
四、浏览与预览:缩略图先行,原图按需加载
列表页只请求缩略图,用图片缓存复用已下载的图片,滑动快时先用占位图顶上。详情页先展示缩略图,再异步拉原图,失败给重新加载按钮。访问用 OBS 临时签名链接,有效期设短一些,过期重新签发,不要把长期公开链接写进代码。删除要同步:端侧删索引、云侧删对象,都成功才算删完。
五、安全:密钥不要出现在端侧代码里
密钥绝不能写进端侧代码、不要提交到代码仓。签名和鉴权放在服务端或云函数里,端侧只拿短期临时凭证;没有服务端时,至少用配置文件隔离密钥,并给账号只授权当前桶的读写权限。桶策略也要收紧:禁止匿名写、禁止列举整个桶,测试桶和正式桶分开,测试密钥用完就作废。
六、实践中遇到的坑
保存到本地相册要另申请写权限,被拒绝时给出去设置打开的入口;原图不要直接塞进图片组件,要按屏幕尺寸解码,退出及时释放;后台上传会被系统挂起,前台恢复后要自动续传。核心是把分工定清楚:端侧管体验和索引,云侧管存储和权限,命名和安全边界先于功能写好。按这个顺序,一个周末就能跑通可用版本。
七、还可以往前走一步
相册跑通后,可以按时间、地点做聚合视图,也可以给照片打标签做检索;愿意接入云侧能力时,缩略图生成和内容分类可以放到云端做,端侧保持轻量。家庭共享也是一个自然扩展:同一个桶按成员分前缀,分享只给对方看指定相册的临时链接。
- 点赞
- 收藏
- 关注作者
评论(0)