HarmonyOS 鸿蒙Next中我就想实现类似浏览器保存图片的功能,为啥这么复杂?

HarmonyOS 鸿蒙Next中我就想实现类似浏览器保存图片的功能,为啥这么复杂?

就一个很简单的功能,用户选择保存在哪个文件夹,然后把文件下载下来并写入。为啥总报错

```lua
err.code : 13400001, err.message :  file operation error   set path permission fail, download

代码如下(用了harmony-utils库)

let fileName = `test_easy_${DateUtil.getTodayTime()}.jpg`;
PickerUtil.saveDocumentEasy([fileName]).then(async (paths) => {
    let path = paths[0];
    const url = 'https://picx.zhimg.com/80/v2-3994a1081d1930cca1f27620f79414c8_720w.jpg?source=2c26e567'
    console.log("start download, url = " + url + ", path = " + path + ", uri = " + this.cacheUri)
    
    try {
      await request.downloadFile(this.getUIContext().getHostContext(), {
          url: url,
          filePath: path
        })
      } catch (err) {
        console.error('err.code : ' + err.code + ', err.message : ' + err.message);
      }
    }).catch((err: BusinessError) => {
    this.uriStr = `调用保存文件,异常:\n${JSON.stringify(err)}`;
})

想问一下代码是哪里错了。另外,官网为啥要把简单的事搞这么复杂


更多关于HarmonyOS 鸿蒙Next中我就想实现类似浏览器保存图片的功能,为啥这么复杂?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

鸿蒙Next中实现浏览器保存图片功能需要调用媒体库API。使用PhotoAccessHelper选择图片,通过Piker获取文件URI,调用Image组件处理图片数据,最后用FileManager保存到指定目录。注意申请ohos.permission.READ_IMAGEVIDEO和ohos.permission.WRITE_IMAGEVIDEO权限。系统安全机制导致必须严格遵循文件访问流程。

更多关于HarmonyOS 鸿蒙Next中我就想实现类似浏览器保存图片的功能,为啥这么复杂?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


从错误代码13400001来看,这是典型的文件权限问题。在HarmonyOS Next中,文件系统访问需要严格遵循沙箱机制和权限管理。以下是关键问题点:

  1. 权限问题:
  • 需要确保在config.json中声明了ohos.permission.WRITE_MEDIA权限
  • 对于外部存储访问,还需要申请动态权限
  1. 路径问题:
  • 直接使用Picker返回的path可能不符合HarmonyOS文件API要求
  • 建议使用官方推荐的getExternalDownloadDir()获取下载目录
  1. 下载API使用:
  • request.downloadFile需要确保filePath参数是应用沙箱内路径
  • 可以先下载到应用缓存目录,再通过FileManager移动到目标位置

建议修改方案:

  1. 先检查权限声明和申请
  2. 使用官方文件API构建完整路径:
import fileIO from '@ohos.fileio';
const downloadDir = globalThis.abilityContext.filesDir + '/Download/';
  1. 分步操作:先下载到临时位置,再移动文件

HarmonyOS的严格权限管理是为了系统安全性,虽然增加了开发复杂度,但能更好地保护用户数据隐私。

回到顶部