【HarmonyOS】API9中datashare转internal的方法
HarmonyOS 3.1 Release版本正式发布了,这个版本给我们带来了一个非常有用的API——FilePicker(文件选择器) @ohos.file.picker,使用这个API我们可以选取手机中的图片视频等用于分享,并且不需要配置任何权限就可以使用。具体的使用方法就不赘述了,官网可以看选择用户文件和保存用户文件这两个文档,文档中有具体的说明。我们通过FilePicker(文件选择器)可以获取一个文件资源uri(如:datashare:///media/image/2),使用文件接口(@ohos.file.fs)就可以读写这个uri对应的文件。这给我们开发带来了极大的便利。
【问题】
然而3.1系统中有一些接口仍然使用的是“internal"协议如下图中,上传接口UploadConfig仅支持"internal"格式,"internal"对应的是应用内部的文件。但是文件选择器选返回的是"datashare"格式,对应的是应用外部的文件,那这该如何转换呢
【解决方案】
首先需要确认的是"internal路径"与"应用开发路径"之间的关系。以上传接口为例,internal://cache/目录对应的就是从Context中获取的应用开发路径cacheDir(应用内部存储中的缓存路径)。
也就是说下面两个路径对应的是同一个文件
路径1:
let context =getContext(this) as common.UIAbilityContext
let cacheDir =context.cacheDir
let path =cacheDir+"/dest.txt"
路径2:
let path ="internal://cache/dest.txt"
确认完这点以后我们只需要把外部的文件复制到cacheDir目录下就可以了,具体代码如下:
这样我们就完成了datashare到internal的转换,可以使用"internal://cache/dest.txt"去做想要的操作了。