《HarmonyOS 7 跨设备数据协同专题》03:Asset 文件迁移与 RDB 数据绑定【鸿蒙心迹】
鸿蒙领航者
·
文字能同步,为什么图片传过去就裂了?

前两篇文字同步都跑通了。这篇加图片附件。
最开始的思路很简单:把文件路径同步过去,另一台设备直接读不就行了?
结果传过去,图片直接裂了。才意识到:一个文件路径,传到另一台设备上根本没有意义。那台设备上根本没有这个文件。
一、本地路径为什么没有跨设备意义
先想一下:手机上的文件路径是 /data/xxx/photo.jpg,这个路径在手机上是对的。
但传到平板上,平板上根本没有这个路径的文件。路径只是个地址,文件本身没过去。
| 方式 | 文件本身 | 跨设备 |
|---|---|---|
| 同步本地路径 | 没过去 | 不行 |
| Asset 迁移 | 过去了 | 可以 |
二、Asset 是什么
Asset 就是专门用来跨设备迁移文件的。它不是一个路径,是带着文件实体的。
你把文件放到 Asset 里,分布式数据对象同步的时候,会把文件实体一起传过去。
这段代码解决什么问题: 把图片作为 Asset 同步。
文件: distributed/NoteObject.ets
用途: 附件跨设备同步
接入位置: 笔记添加图片
import { distributedDataObject } from '@kit.ArkData';
import { commonType } from '@kit.ArkData';
// 创建 Asset
let imageAsset: commonType.Asset = {
name: 'photo.jpg',
uri: 'file://docs/storage/Users/currentUser/photo.jpg',
createTime: '2026-09-22',
mimeType: 'image/jpeg'
};
// 放到分布式对象里
noteObj.image = imageAsset;
这样同步的时候,图片文件就跟着一起过去了。

三、bindAssetStore 是什么
光同步文件还不够。笔记记录存在数据库里,附件也得跟数据库绑定。
bindAssetStore 就是把 Asset 和 RDB 数据库绑定起来。数据库里存的笔记记录和附件文件,形成完整的数据关系。
四、几个容易踩的坑
第一个坑:直接同步 /data/… 本地路径。路径传过去了,文件没过去。
第二个坑:把多个附件直接塞进 Asset 数组。有限制,不是随便塞。
第三个坑:文件没进入支持的分布式目录。文件得在支持的目录里才能同步。
第四个坑:数据库记录已经同步但附件还没准备好。记录到了,文件还没下完。

这次做附件同步最大的体会是:描述一个文件和真正搬一个文件,完全是两件事。路径只是描述,Asset 才是真正把文件实体搬过去。
更多推荐


所有评论(0)