HarmonyOS鸿蒙Next中利用@ohos.file.picker中save方法,无法实现图片保存到相册功能

HarmonyOS鸿蒙Next中利用@ohos.file.picker中save方法,无法实现图片保存到相册功能

官方提供的这个代码无法实现保存图片功能,点击只有警告:

import picker from '@ohos.file.picker'
async function example() {
  try {
    let PhotoSaveOptions = new picker.PhotoSaveOptions()
    PhotoSaveOptions.newFileNames = ['PhotoViewPicker01.jpg', 'PhotoViewPicker01.mp4']
    let photoPicker = new picker.PhotoViewPicker()
    photoPicker.save(PhotoSaveOptions).then((PhotoSaveResult) => {
      console.log('PhotoViewPicker.save successfully, PhotoSaveResult uri:' + JSON.stringify(PhotoSaveResult))
    }).catch((err) => {
      console.error('PhotoViewPicker.save failed with err: ' + err)
    })
  } catch (err) {
    console.error('PhotoViewPicker failed with err: ' + err)
  }
}

官方提供的这个代码无法实现保存图片功能,点击只有警告:

01-11 20:16:17.505 26024-10730/com.example.myapplication I 0FEFE/JsApp: [picker] config: {“action”:“ohos.want.action.CREATE_FILE”,“parameters”:{“startMode”:“save”,“key_pick_file_name”:[“PhotoViewPicker01.jpg”,“PhotoViewPicker01.mp4”],“saveFile”:“PhotoViewPicker01.jpg”}}


更多关于HarmonyOS鸿蒙Next中利用@ohos.file.picker中save方法,无法实现图片保存到相册功能的实战教程也可以访问 https://www.itying.com/category-93-b0.html

17 回复

感谢这篇帖子的回答,让我找到了正确的路,终于实现了公共目录读写功能,应用备份/恢复有指望了;为了感谢大家,整理了帖子如下,望后来者无需再踩N多坑。

https://developer.huawei.com/consumer/cn/forum/topic/0202148239705951102?fid=0102683795438680754

更多关于HarmonyOS鸿蒙Next中利用@ohos.file.picker中save方法,无法实现图片保存到相册功能的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


试一下这个代码,可以保存成功

export async function savePictureToAlbum(buffer: ArrayBuffer):Promise<string>{
  try {
    const photoSaveOptions = new picker.PhotoSaveOptions();
    let imgName = "IMG_" + Date.parse(new Date().toString()) + ".jpg";
    photoSaveOptions.newFileNames = [imgName];
    let photoViewPicker = new picker.PhotoViewPicker();
    let photoSaveResult = await photoViewPicker.save(photoSaveOptions);

    if(photoSaveResult.length === 0){
      throw new Error("用户取消保存")
    }

    let file = fs.openSync(photoSaveResult[0], fs.OpenMode.READ_WRITE);
    await fs.write(file.fd, buffer);
    fs.closeSync(file);

    return new Promise((resolve) => {
      resolve(photoSaveResult[0])
    })
  } catch (error) {
    return new Promise((resolve, reject) => {
      reject(error);
    });
  }
}

请问点击后提示这个是什么意思,需要添加什么吗:

[picker] config: {"action":"ohos.want.action.CREATE_FILE","parameters":{"startMode":"save","key_pick_file_name":["IMG_1704989588000.jpg"],"saveFile":"IMG_1704989588000.jpg"}}

我也是没有拉起photoPicker界面 你的这个警告,

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

api 是哪个版本? 手机系统版本?

感谢,我用真机就可以了。这样也太尴尬了。单纯保存张图片,还要打开这哪页面,繁琐的要死,

开发鸿蒙 没有真机寸步难行。预览器和模拟器很多bug,

我也是借来的真机。拓荒的路漫长啊 [笑死],

官方说的真机可以

![​](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/031/531/091/0070086000031531091.20240115113501.77523431308286858237542252205906:50001231000000:2800:31383365FCF1A5E694BD07F928453C1E8FD00AF705661FF22B50D7B7B3FAC5CC.png)

官方说通过保存模式拉起photoPicker界面,但是完全没有响应

我有个小疑问哈
@ohos.file.picker 不是让你在手机上选择图片吗
那为什么还要保存到相册呢 不是本来就在手机里面吗

你说的是select选择图库图片的功能,我提问的是save保存的功能。比如说我生成一张图片,需要保存到手机上,

哦哦 抱歉 看错了,

在HarmonyOS鸿蒙Next中,使用@ohos.file.pickersave方法无法实现图片保存到相册功能,可能原因如下:

  1. 权限问题:确保应用已获取ohos.permission.WRITE_MEDIA权限,并在config.json中正确声明。

  2. URI问题save方法需要正确的文件URI。确保URI指向有效的文件路径,且路径可写。

  3. 文件路径问题:鸿蒙系统的相册路径可能与其他系统不同,需确认文件保存路径是否为相册的标准路径。

  4. API使用问题save方法可能未正确调用或参数设置不当,需检查参数和调用方式是否符合API文档要求。

  5. 系统限制:鸿蒙Next可能存在某些系统限制,阻止文件直接保存到相册。

建议检查权限、URI、文件路径、API调用及系统限制,确保符合要求。

在HarmonyOS鸿蒙Next中,使用@ohos.file.pickersave方法保存图片到相册时,需确保以下几点:

  • 权限申请:确保已申请并授予ohos.permission.WRITE_MEDIA权限。
  • 文件路径:保存的文件路径应符合相册的存储规范,通常为/storage/media/100/local/files/Pictures/
  • MIME类型:保存时指定正确的MIME类型,如image/jpeg
  • 相册刷新:保存后调用MediaScannerConnection刷新相册,使图片立即显示。

若仍无法保存,请检查日志排查错误。

回到顶部