【HarmonyOS NEXT】网络图片存储到相册中碰到的问题

 【关键字】

网络图片 / 存储到相册 / fs.copyFile

【问题描述】

实现网络图片保存到相册推荐用什么API?

已申请ohos.permission.WRITE_IMAGEVIDEO和ohos.permission.READ_IMAGEVIDEO权限。

目前尝试的方案:第一步:下载图片到本地沙盒路径为:filePath

方案一:

let uri = await phAccessHelper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg');
fs.copyFile(filePath, uri)//这一步一直报错:No such file or directory, code:13900002

方案二:

let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
let fetchOption: photoAccessHelper.FetchOptions = {
fetchColumns: [],
predicates: predicates
};
let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums( photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC);
let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject()
let asset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();album.addAssets([asset], (err) => {});

方案一的问题:可以把相册中已有的图片添加到用户新建的相册中,如果用户没有新建相册,则不成功,请问可以不指定用户新建的相册么?

代码参考:https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V2/photoaccesshelper-useralbum-guidelines-0000001608076068-V2

方案二的问题:如何用filePath构造出photoAccessHelper.PhotoAsset对象,然后调用album.addAssets?

【解决方案】

方案一是可行的,报错的原因:fs.copyFile的dest不支持uri,可以打开后再使用。

请参考代码如下:

let uri = await phAccessHelper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg');
let filePath = this.resourcesFile2SandboxFile($r('app.media.test'));
let destFile: fileIo.File = fs.openSync(uri, fileIo.OpenMode.READ_WRITE);

fs.copyFile(filePath, destFile.fd).then(() => {
console.info("copy file succeed");
}).catch((err: BusinessError) => {
console.error("copy file failed with error message: " + err.message + ", error code: " + err.code);
});

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值