HarmonyOS 通过photoViewPicker.save保存图片到内部存储的文档或者下载目录后,通过图片浏览器看不到这个图片

需要保存图片到手机,用户可以打开图片自己分享给好友。

通过photoViewPicker.save保存网络图片,选择保存到内部存储的“文档”或者“下载”目录后,通过“图库”应用找不到不到这个图片。

用户需要打开 “文件管理” 应用才可以看到这张图片,不是特别友好。

有其他方法可以直接保存网络图片到手机相册吗?

我的保存方法如下:

private saveImage(buffer: ArrayBuffer, saveComplete?:()=>void){
  const photoViewPicker:picker.PhotoViewPicker = new picker.PhotoViewPicker();
  const dateStr = (new Date().getTime()).toString();
  let newImgName =  [dateStr + '.jpg'];
  photoViewPicker.save({newFileNames:newImgName}).then((photoSaveResult:Array<string>)=>{
    let uri = photoSaveResult[0];
    console.info('photoViewPicker.save to file succeed and URI is:' + uri)
    let file = fs.openSync(uri, fs.OpenMode.READ_WRITE);
    fs.write(file.fd, buffer).then((result)=>{
      ShowUtils.showToast('保存成功');
      if(saveComplete){
        saveComplete();
      }
    })
  })
}
HarmonyOS
22h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

1.保存相册需要申请ACL权限, 详见:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/photoaccesshelper-preparation-V5#申请相册管理模块功能相关权限关于相册路径可以参考如下代码:

func async saveImage(buffer: ArrayBuffer | string): Promise<void> {
  let context = getContext(this) as common.UIAbilityContext;
  let helper = photoAccessHelper.getPhotoAccessHelper(context);
  let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg');
  let file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
  await fs.write(file.fd, buffer);
  await fs.close(file.fd);
}

2.使用savebutton来实现,详见:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-security-components-savebutton-V5#示例

SaveButton().onClick(async (event:ClickEvent, result:SaveButtonOnClickResult) => {
  if (result == SaveButtonOnClickResult.SUCCESS) {
    try {
      const context = getContext(this);
      let helper = photoAccessHelper.getPhotoAccessHelper(context);
      // onClick触发后10秒内通过createAsset接口创建图片文件,10秒后createAsset权限收回。
      let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'png');
      // 使用uri打开文件,可以持续写入内容,写入过程不受时间限制
      let file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
      // 写入文件
      await fs.write(file.fd, "context");
      // 关闭文件
      await fs.close(file.fd);
    } catch (error) {
      console.error("error is "+ JSON.stringify(error));
    }
  }
})
分享
微博
QQ
微信
回复
21h前
相关问题
HarmonyOS 文件或者图片下载
10浏览 • 0回复 待解决
PhotoViewPicker获取图片如何关掉它?
449浏览 • 1回复 待解决
HarmonyOS 保存图片相册问题
405浏览 • 1回复 待解决
HarmonyOS 保存图片本地相册
26浏览 • 1回复 待解决
HarmonyOS 保存图片系统相册
0浏览 • 0回复 待解决
HarmonyOS 截图保存图片相册
38浏览 • 1回复 待解决
HarmonyOS 实现保存图片相册
39浏览 • 1回复 待解决
HarmonyOS 浏览器不能通过scheme拉起app
690浏览 • 1回复 待解决