HarmonyOS 鸿蒙Next 文件下载保存到外部存储问题
HarmonyOS 鸿蒙Next 文件下载保存到外部存储问题
通过
let hereAbilityContext: Context = getContext();
let hereCacheDir: string = this.hereAbilityContext.cacheDir;
let hereFilesDir: string = this.hereAbilityContext.filesDir;
获取到的是内部存储路径,无法满足需求。
1.先创建图片文件,并获取图片uri
2.打开文件
3.通过buffer将数据写到文件中
参考下述demo:
//Index.ets
import photoAccessHelper from ‘@ohos.file.photoAccessHelper’;
import fs from ‘@ohos.file.fs’;
@Entry
@Component
struct Index {
@State message: string = ‘Hello World’
build() {
Row() {
Column() {
Image($r(‘app.media.icon’))
.height(300)
.width(300)
SaveButton().onClick(async (_event: ClickEvent, result: SaveButtonOnClickResult) => {
if (result == SaveButtonOnClickResult.SUCCESS) {
try {
const context = getContext(this);
let helper = photoAccessHelper.getPhotoAccessHelper(context);
// onClick触发后5秒内通过createAsset接口创建图片文件,5秒后createAsset权限收回。
let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, ‘jpg’);
// 使用uri打开文件,可以持续写入内容,写入过程不受时间限制
let file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
try {
context.resourceManager.getMediaContent($r(‘app.media.startIcon’).id, 0)
.then(async value => {
let media = value.buffer;
// 写到媒体库文件中
await fs.write(file.fd, media);
await fs.close(file.fd);
AlertDialog.show({message:‘已保存至相册!’});
});
}
catch (err) {
console.error("error is "+ JSON.stringify(err))
}
} catch (error) {
console.error("error is "+ JSON.stringify(error));
}
}
else {
AlertDialog.show({ message: “设置权限失败” })
}
})
}
.width(‘100%’)
}
.height(‘100%’)
}
}
针对HarmonyOS 鸿蒙Next文件下载保存到外部存储的问题,以下是一些解决方案:
在HarmonyOS中,文件默认保存在应用沙盒路径,用户无法直接访问。若需将文件保存到外部存储,如SD卡,可通过FilePicker实现。具体步骤如下:
- 导入选择器模块和基础文件API模块。
- 创建文件保存选项实例,并设置保存文件名等参数。
- 创建文件选择器实例。
- 调用save()接口拉起FilePicker界面,用户选择目标文件夹后即可完成文件保存操作。
需要注意的是,通过Picker访问相关文件无需申请权限,但save接口是用户可感知的,即会拉起FilePicker界面。保存成功后,返回的URI权限是临时读写权限,待退出应用后台后失效。
此外,HarmonyOS目前可能不支持直接将软件安装到外部存储卡中,这主要取决于软件开发者在开发过程中的设置。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html