本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的文件管理技术细节,基于实际开发实践进行总结。
主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。
本文为原创内容,任何形式的转载必须注明出处及原作者。

引言
在移动应用开发中,文件分享功能可以帮助用户轻松地在不同应用间共享文件,提升应用之间的交互性和用户体验。HarmonyOS Next 提供了两种文件分享方式:基于 URI 和基于 FD,并提供了相应的安全控制机制,确保文件分享的安全性和可靠性。
1. 文件分享的基础概念
文件分享是指应用之间通过分享文件 URI 或文件描述符 (FD) 的方式,实现文件数据的交换和共享。HarmonyOS Next 支持应用间基于 URI 和 FD 的文件分享方式。
2. URI 和 FD 分享方式的特点

分享方式优点缺点
基于 URI使用方便,易于实现,支持临时授权,文件在被分享应用退出时权限被收回只能分享单个文件,不支持目录分享
基于 FD可以分享单个文件,支持目录分享文件关闭 FD 后,无法再打开分享文件,使用相对复杂

3. 分享权限控制与安全管理
为了保护用户数据安全,应用在分享文件之前,需要获得用户的授权。开发者需要在应用的配置文件 module.json5 中声明所需的文件分享权限,例如:

"abilities": [
  {
    "name": "EntryAbility",
    "skills": [
      {
        "actions": [
          "ohos.arkui.intent.action.SEND_DATA"
        ],
        "uris": [
          {
            "scheme": "file",
            "host": "*",
            "path": "/storage/*"
          }
        ]
      }
    ]
  }
]

4. 示例代码:基于 URI 的文件分享实现
以下示例代码展示了如何使用 HarmonyOS Next 提供的 API 实现基于 URI 的文件分享:
分享文件

import { fileUri } from '@kit.CoreFileKit';
import { wantConstant } from '@kit.AbilityKit';
import { UIAbility } from '@kit.AbilityKit';
import { Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
  onWindowStageCreate(windowStage: WindowStage) {
    // 获取文件沙箱路径
    let filePath = this.context.filesDir + '/test.txt';
    // 将沙箱路径转换为 URI
    let uri = fileUri.getUriFromPath(filePath);
    // 创建分享意图
    let want: Want = {
      flags: wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION | 
             wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION,
      action: 'ohos.arkui.intent.action.SEND_DATA',
      uri: uri,
      type: 'text/plain'
    };
    // 启动分享
    this.context.startAbility(want)
      .then(() => {
        console.log('Share file successfully');
      })
      .catch((err) => {
        console.error('Failed to share file:', err);
      });
  }
}

接收文件

import { fileIo as fs } from '@kit.CoreFileKit';
import { Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
  onNewWant(want: Want) {
    // 获取分享文件的 URI
    let uri = want.uri;
    // 打开文件
    let file = fs.openSync(uri, fs.OpenMode.READ_WRITE);
    // 读取文件内容
    // ...
    // 关闭文件
    fs.closeSync(file);
  }
}

5. 文件分享的安全控制

  • 权限控制: 应用在分享文件之前,需要获得用户的授权。开发者需要在应用的配置文件中声明所需的文件分享权限。
  • 访问控制: 应用只能访问授权的文件,无法访问未授权的文件。
  • 数据加密: 对于敏感数据,可以使用数据加密技术,例如 AES、RSA 等,确保数据安全。
    6. 总结
    HarmonyOS Next 提供了两种文件分享方式:基于 URI 和基于 FD,并提供了相应的安全控制机制,确保文件分享的安全性和可靠性。我们可以根据应用需求选择合适的文件分享方式,并利用 HarmonyOS Next 提供的 API 实现文件分享功能,为用户提供更便捷的数据交换体验。同时,我们也需要重视文件分享的安全控制,确保用户数据安全。

SameX
1 声望2 粉丝