鸿蒙Next如何下载文件并打开

在鸿蒙Next系统上下载文件后,总是找不到打开方式,请问具体应该如何操作?比如下载了PDF或压缩包文件,系统默认用什么应用打开?需要额外安装第三方软件吗?求详细步骤指导。

2 回复

鸿蒙Next下载文件?简单!用@ohos.net.http发起请求,拿到数据后fs.write写进沙箱。想打开?调用startAbility加上文件路径和类型,系统会自动匹配应用。注意权限别忘开,不然只能对着空气点鼠标咯~(代码?下次带咖啡来换😉)

更多关于鸿蒙Next如何下载文件并打开的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)中,下载并打开文件可以通过以下步骤实现,主要涉及网络请求、文件管理和应用间跳转。以下是详细说明和代码示例:

1. 下载文件

使用@ohos.net.http模块进行网络请求,将文件保存到应用沙箱目录。

import http from '@ohos.net.http';
import fs from '@ohos.file.fs';

async function downloadFile(url: string, fileName: string): Promise<string> {
  // 创建HTTP请求
  let httpRequest = http.createHttp();
  
  try {
    // 发起请求
    let response = await httpRequest.request(url, {
      method: http.RequestMethod.GET,
      connectTimeout: 60000,
      readTimeout: 60000,
    });

    if (response.responseCode === http.ResponseCode.OK) {
      // 获取应用沙箱路径
      let context = getContext(this) as common.UIAbilityContext;
      let filesDir = context.filesDir;
      let filePath = `${filesDir}/${fileName}`;

      // 写入文件
      let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
      fs.writeSync(file.fd, response.result as ArrayBuffer);
      fs.closeSync(file);

      console.log('文件下载成功: ' + filePath);
      return filePath;
    } else {
      throw new Error(`下载失败,状态码: ${response.responseCode}`);
    }
  } catch (error) {
    console.error('下载文件错误: ' + JSON.stringify(error));
    throw error;
  } finally {
    // 关闭连接
    httpRequest.destroy();
  }
}

2. 打开文件

使用@ohos.file.fs@ohos.app.ability.want模块,通过系统能力或第三方应用打开文件。

import wantConstant from '@ohos.app.ability.wantConstant';
import want from '@ohos.app.ability.want';
import fileUri from '@ohos.file.fileuri';

async function openFile(filePath: string, mimeType: string) {
  let context = getContext(this) as common.UIAbilityContext;
  
  // 构造文件URI
  let fileUriStr = fileUri.getUriFromPath(filePath);
  
  // 创建Want对象,指定打开动作和文件类型
  let wantInfo: want.Want = {
    action: wantConstant.Action.VIEW_ACTION,
    uri: fileUriStr,
    type: mimeType, // 例如:'application/pdf'、'image/jpeg'
    flags: wantConstant.Flags.FLAG_GRANT_READ_URI_PERMISSION
  };

  try {
    // 启动系统能力或应用打开文件
    await context.startAbility(wantInfo);
    console.log('打开文件成功');
  } catch (error) {
    console.error('打开文件失败: ' + JSON.stringify(error));
    // 可提示用户未安装支持的应用
  }
}

3. 完整调用示例

async function downloadAndOpenFile() {
  let url = 'https://example.com/sample.pdf';
  let fileName = 'sample.pdf';
  let mimeType = 'application/pdf';

  try {
    // 下载文件
    let filePath = await downloadFile(url, fileName);
    
    // 打开文件
    await openFile(filePath, mimeType);
  } catch (error) {
    console.error('操作失败: ' + error.message);
  }
}

注意事项:

  • 权限配置:在module.json5中声明网络和存储权限:
    {
      "module": {
        "requestPermissions": [
          {
            "name": "ohos.permission.INTERNET"
          },
          {
            "name": "ohos.permission.READ_MEDIA",
            "reason": "用于读取下载的文件"
          }
        ]
      }
    }
    
  • 文件类型支持:确保系统有对应MIME类型的应用(如PDF查看器)。
  • 错误处理:增加用户提示,处理无网络或文件损坏的情况。

以上代码适用于HarmonyOS NEXT的Stage模型,实际使用时需根据API版本调整。

回到顶部