HarmonyOS 鸿蒙Next 用户从APP下载文件到Download目录的正确流程是什么 以及需要的权限如何添加

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 用户从APP下载文件到Download目录的正确流程是什么 以及需要的权限如何添加

官方例子是这样写入到Download目录:

function writeUserDownloadDirExample() {
  // 检查是否具有 READ_WRITE_DOWNLOAD_DIRECTORY 权限,无权限则需要向用户申请授予权限。
  try {
    // 获取 Download 目录
    const downloadPath = Environment.getUserDownloadDir();
    console.info(`success to getUserDownloadDir: ${downloadPath}`);
    // 保存 temp.txt 到 Download 目录下
    const file = fs.openSync(`${downloadPath}/temp.txt`, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);
    fs.writeSync(file.fd, 'write a message');
    fs.closeSync(file);
  } catch (error) {
    const err: BusinessError = error as BusinessError;
    console.error(`Error code: ${err.code}, message: ${err.message}`);
  }
}

但是,假如现在是一个二进制文件,比如zip压缩包,比如PDF文件,我该如何保存到Download目录


更多关于HarmonyOS 鸿蒙Next 用户从APP下载文件到Download目录的正确流程是什么 以及需要的权限如何添加的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

可以参考这个:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/save-user-file-V5#download模式保存文件

参考代码如下:

copyToDownload() {
  let context = getContext() as common.UIAbilityContext;
  let filesDir = context.filesDir;
  let date = new Date();
  let failCallback1 = (err: number) => {
    console.error(`Failed to download the task. Code: ${err}`);
  };
  let fileName = date.getTime() + '.png'
  let filePath = filesDir + '/' + fileName
  try {
    request.downloadFile(context, {
      url: url1,
      filePath: filePath
    }).then((downloadTask: request.DownloadTask) => {
      downloadTask.on('fail', failCallback1);

      downloadTask.on('complete', () => {
        console.info('download complete');
        let documentSaveOptions = new picker.DocumentSaveOptions();
        documentSaveOptions.newFileNames = [fileName];
        let documentPicker = new picker.DocumentViewPicker();
        documentPicker.save(documentSaveOptions).then((documentSaveResult: Array<string>) => {
          let uri = documentSaveResult[0];
          let sanFile = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
          let pubFile = fs.openSync(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
          fs.copyFileSync(sanFile.fd, pubFile.fd)
          console.info('DocumentViewPicker.save successfully, DocumentSaveResult uri: ' +
          JSON.stringify(documentSaveResult));
        }).catch((err: BusinessError) => {
          console.error('DocumentViewPicker.save failed with err: ' + JSON.stringify(err));
        });
      })
    }).catch((err: BusinessError) => {
      console.error(`Invoke downloadTask failed, code is ${err.code}, message is ${err.message}`);
    });
  } catch (error) {
    let err: BusinessError = error as BusinessError;
    console.error(`Invoke downloadFile failed, code is ${err.code}, message is ${err.message}`);
  }
}

更多关于HarmonyOS 鸿蒙Next 用户从APP下载文件到Download目录的正确流程是什么 以及需要的权限如何添加的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,用户从APP下载文件到Download目录的正确流程及权限添加方式如下:

下载流程:

  1. 请求权限:在APP中,首先需要通过代码请求存储权限,以确保APP有权访问设备的存储系统。

  2. 创建下载任务:在用户触发下载操作后,APP应创建一个下载任务,包括指定下载文件的URL、目标存储路径等信息。

  3. 执行下载:通过系统的下载管理器或自定义的下载逻辑,执行下载任务,将文件保存到指定的Download目录中。

  4. 通知用户:下载完成后,APP应通过通知或UI更新等方式告知用户下载结果。

权限添加:

  1. 修改AndroidManifest.xml:在APP的AndroidManifest.xml文件中,添加以下权限声明:

    <uses-permission android:name="ohos.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="ohos.permission.WRITE_EXTERNAL_STORAGE"/>
    
  2. 动态请求权限:在运行时,APP应检查并请求上述存储权限。如果用户未授予权限,APP应提示用户授予权限。

请注意,以上流程仅适用于HarmonyOS鸿蒙Next系统,且可能因系统版本或设备差异而有所不同。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部