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

HarmonyOS 鸿蒙Next 通过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 鸿蒙Next 通过photoViewPicker.save保存图片到内部存储的文档或下载目录后,通过图片浏览器看不到这个图片的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

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));

            }

          }

        })
		```

更多关于HarmonyOS 鸿蒙Next 通过photoViewPicker.save保存图片到内部存储的文档或下载目录后,通过图片浏览器看不到这个图片的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,通过photoViewPicker.save保存图片到内部存储的文档或下载目录后,如果通过图片浏览器看不到这个图片,可能是由以下几个原因导致的:

  1. 保存路径问题:确认图片是否确实被保存到了预期的内部存储路径。检查photoViewPicker.save方法指定的路径是否正确,以及该路径是否在设备的文档或下载目录中。

  2. 媒体扫描未触发:系统可能未自动扫描到新增的图片文件。可以尝试手动触发媒体扫描,或者检查是否有相关权限设置阻止了自动扫描。

  3. 权限问题:确保应用拥有读写内部存储的权限。在鸿蒙系统中,权限管理较为严格,缺少必要的权限可能导致文件无法正确保存或读取。

  4. 图片格式或损坏:检查保存的图片格式是否被图片浏览器支持,或者图片文件是否在保存过程中损坏。

  5. 目录访问限制:某些设备或系统可能对特定目录的访问有限制,确保保存图片的目录对图片浏览器是可见的。

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

回到顶部