HarmonyOS 鸿蒙Next 文件下载保存到外部存储问题

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 文件下载保存到外部存储问题

想将图片或者音视频保存到本地,在相册中可以查看,应该怎么操作?
通过
let hereAbilityContext: Context = getContext();
let hereCacheDir: string = this.hereAbilityContext.cacheDir;
let hereFilesDir: string = this.hereAbilityContext.filesDir;
获取到的是内部存储路径,无法满足需求。

2 回复

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实现。具体步骤如下:

  1. 导入选择器模块和基础文件API模块。
  2. 创建文件保存选项实例,并设置保存文件名等参数。
  3. 创建文件选择器实例。
  4. 调用save()接口拉起FilePicker界面,用户选择目标文件夹后即可完成文件保存操作。

需要注意的是,通过Picker访问相关文件无需申请权限,但save接口是用户可感知的,即会拉起FilePicker界面。保存成功后,返回的URI权限是临时读写权限,待退出应用后台后失效。

此外,HarmonyOS目前可能不支持直接将软件安装到外部存储卡中,这主要取决于软件开发者在开发过程中的设置。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部