HarmonyOS 鸿蒙Next 网络文件下载到公共目录示例

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

HarmonyOS 鸿蒙Next 网络文件下载到公共目录示例

HarmonyOS 网络文件下载到公共目录示例?

2 回复
// 将网络资源文件下载到应用文件目录并读取一段内容
import common from '@ohos.app.ability.common';
import fs from '@ohos.file.fs';
import request from '@ohos.request';
import { BusinessError } from '@ohos.base';
import buffer from '@ohos.buffer';
import { picker } from '@kit.CoreFileKit';

@Entry
@Component
struct Index {
  build() {
    Button().onClick(() => {
      let context = getContext(this) as common.UIAbilityContext;
      let filePath = context.filesDir + "/test.xlsx";
      let url = "xxx.xlsx"
      try {
        request.downloadFile(context, {
          url: url,
          filePath: filePath
        }).then((data: request.DownloadTask) => {
          let downloadTask: request.DownloadTask = data;
          downloadTask.on('complete', () => {
            console.info('download complete');
            let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
            let arrayBuffer = new ArrayBuffer(4096000);
            let readLen = fs.readSync(file.fd, arrayBuffer);
            let buf = buffer.from(arrayBuffer, 0, readLen);
            console.info(`content of File: ${buf.toString()}`);
            let writeLen = fs.writeSync(file.fd, arrayBuffer);
            fs.closeSync(file);

            const documentSaveOptions = new picker.DocumentSaveOptions(); // 创建文件管理器选项实例
            // documentSaveOptions.newFileNames = ["1.xlsx"]; // 保存文件名(可选)
            // documentSaveOptions.fileSuffixChoices = ['xlsx']; // 保存文件类型(可选)
            let uris: Array<string> = [];
            const documentViewPicker = new picker.DocumentViewPicker(); // 创建文件选择器实例
            documentViewPicker.save(documentSaveOptions).then((documentSaveResult: Array<string>) => {
              uris = documentSaveResult;
              console.info('documentViewPicker.save to file succeed and uris are:' + uris);

              let uri = uris[0];
              let file2 = fs.openSync(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
              let writeLen2 = fs.writeSync(file2.fd, arrayBuffer);
              fs.closeSync(file2);
            }).catch((err: BusinessError) => {
              console.error(`Invoke documentViewPicker.save failed, code is ${err.code}, message is ${err.message}`);
            })
          })

          let failCallback = () => {
            console.info('Download task fail.');
          };
          downloadTask.on('fail', failCallback);

        }).catch((err: BusinessError) => {
          console.error(`downLoadFileTask failed, code is ${err.code}, message is ${err.message}`);
        });
      } catch (error) {
        console.error(`downLoadFileTask failed, code is ${error.code}, message is ${error.message}`);
      }
    })
  }
}

针对HarmonyOS 鸿蒙Next网络文件下载到公共目录的需求,以下是一个示例说明:

在HarmonyOS中,将网络文件下载到公共目录通常涉及以下几个步骤:

  1. 获取公共目录路径:使用ohos.file.environment接口获取公共目录路径,如Download、Documents等。这需要确认设备支持SystemCapability.FileManagement.File.Environment.FolderObtain系统能力。
  2. 申请权限:若需访问公共目录,需申请对应的公共目录访问权限,如ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY
  3. 下载文件:使用网络请求接口(如@ohos.request)创建下载任务,并指定下载文件的保存路径为公共目录。
  4. 处理下载结果:下载完成后,可以通过文件IO接口(如@ohos.file.fs)查询已下载的文件,并进行后续处理。

请注意,由于OpenHarmony的API可能随版本更新而变化,建议在实际开发中参考最新的OpenHarmony开发者文档或API指南。

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

回到顶部