【HarmonyOS实战开发】解读鸿蒙沙箱机制

33 篇文章 0 订阅
33 篇文章 0 订阅

前言

应用沙箱是一种以安全防护为目的的隔离机制,避免数据受到恶意路径穿越访问。在这种沙箱的保护机制下,应用可见的目录范围即为“应用沙箱目录”。

●对于每个应用,系统会在内部存储空间映射出一个专属的“应用沙箱目录”,它是“应用文件目录”与一部分系统文件(应用运行必需的少量系统文件)所在的目录组成的集合。
●应用沙箱限制了应用可见的数据的最小范围。在“应用沙箱目录”中,应用仅能看到自己的应用文件以及少量的系统文件(应用运行必需的少量系统文件)。因此,本应用的文件也不为其他应用可见,从而保护了应用文件的安全。
●应用可以在“应用文件目录”下保存和处理自己的应用文件;系统文件及其目录对于应用是只读的;而应用若需访问用户文件,则需要通过特定API同时经过用户的相应授权才能进行。
在这里插入图片描述

应用文件目录与应用文件路径

如前文所述,“应用沙箱目录”内分为两类:应用文件目录和系统文件目录。
系统文件目录对应用的可见范围由系统预置,开发者无需关注。

在此主要介绍应用文件目录,如下图所示。应用文件目录下某个文件或某个具体目录的路径称为应用文件路径。应用文件目录下的各个文件路径,具备不同的属性和特征。

应用文件目录结构图
在这里插入图片描述

●获取沙箱目录

getContext().cacheDir
getContext().fileDir
getContext().tempDir

●文件操作

// harmonyOS提供文件操作的API,相当于nodejs的中的fs操作
// 注意: 在API9中 使用fs
// 在API11和API12中官方又提供了 fileIO的基础方法,用法和fs基本一致,实际导出的就是API9中的fs

open 打开文件
close 关闭文件
write写入文件
copy 复制文件
unlink 删除文件
mkdir 创建文件夹

// 上述方法均支持promise并提供有对应的同步方法
// 想要操作一个文件,首先要打开一个文件,读取一个文件的buffer或者fd,通过fd进行文件的buffer进行相应的操作

●沙箱目录的内容 图片或者web组件要去访问的,需要使用文件协议

file:// 

●代码演示下载网络图片

  async downLoad () {
   let path = getContext().cacheDir + '/' + Date.now() + ".jpg"
   const task = await request.downloadFile(getContext(),{
     url: 'http://dingyue.ws.126.net/2024/0209/8ec94ea3g00s8l8ki00ytd200f0008cg00it00ag.gif',
     filePath:  path 
   })
   task.on("progress", (process,total) => {
      promptAction.showToast({
        message:  process + '-' + total
      })
   })
   task.on("complete", () => {
     this.tempPath = path
     AlertDialog.show({
       message: '下载成功'
     })
   })

 }

●代码演示从相册选择图片、保存在沙箱并上传

// 导入图片选择器
import { picker } from '@kit.CoreFileKit'
// 导入文件操作库
import { fileIo } from '@kit.CoreFileKit'

// 选择图片
async selectImage() {
  const photoPicker = new picker.PhotoViewPicker()
  const result = await photoPicker.select({
    // 图片类型
    MIMEType: picker.PhotoViewMIMETypes.IMAGE_TYPE,
    // 最多张数
    maxSelectNumber: 9
  })
  
  // 选择的图片数组
  if (!result.photoUris?.length) { return }
  
  // 保存到沙箱cache目录
  // 获取cache目录
  const saveDir = getContext().cacheDir
  
  // 构造上传文件需要的参数
  const files: request.File[] = []
 
  // 读取相册文件
  result.photoUris.forEach(url => {
      const file = fileIo.openSync(url, fileIo.OpenMode.READ_ONLY)
      // 将文件拷贝到沙箱目录
      const uniqueName = util.generateRandomUUID() + ".jpg"
      fileIo.copyFileSync(file.fd, saveDir + "/" + uniqueName)
      // 生成参数
      files.push({
        filename: uniqueName, // 文件名称
        name: 'file', // 接口的参数名称
        type: 'jpg', // 文件后缀
        uri: `internal://cache/${uniqueName}` // 文件的路径,internal: 是固定写法
      })
      fileIo.close(file.fd)
    })  
    
    // 上传
    // 构造上传需要的参数
    let config: request.UploadConfig = {
      url: "", // 服务器上传图片的接口地址
      method: 'POST',
      header: {
        "Authorization": "", // 身份验证标识,以服务器要求为准
        "Content-Type": "multipart/form-data" // 请求体类型,表单类型
      },
      files,
      data: [] // 批量上传需要的参数
    }

    // 上传完成,结果保存在list
    try {
        let list: list[] = []
        const task = await request.uploadFile(context, config)
        // 成功执行意味着任务创建成功,而不是上传成功
        task.on("fail", () => {
          // 上传失败
          promptAction.showToast({ message: "上传失败"})
        })

        task.on("complete", () => {
          // 上传成功
        })

        // 每上传成功一次就会进来,可以获取到上传成功的url
        task.on("headerReceive", (header: object) => {
          if (header["body"]) {
            const result = JSON.parse(header["body"]) as ResponseData<string>
            if (result.code === 200 && result.data) {
              list.push(result.data)
            }
          }
        }) 
     } catch (error) {
        promptAction.showToast({ message: error.message})
     }

}

写在最后

●如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我两个小忙:
●点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
●关注小编,同时可以期待后续文章ing ,不定期分享原创知识。

在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
鸿蒙(HarmonyOS)是由华为公司自主研发的一款面向多种终端设备的分布式操作系统。它的设计理念是“开放、协同、共享”,旨在构建一个统一、流畅、智能、安全的操作系统生态圈。 首先,鸿蒙具有可扩展性,能够适应多种终端设备的不同需求。它采用了微内核架构,将底层核心功能进行模块化设计,具备更好的灵活性和可定制性。无论是智能手机、平板电脑、智能手表还是智能家居设备,都可以使用鸿蒙作为操作系统,实现设备之间的快速互联互通。 其次,鸿蒙注重协同性和共享性。鸿蒙提供了一套分布式数据管理、任务调度和资源共享的机制,使得用户在不同设备之间能够实现无缝切换和共享资源。例如,用户可以在手机上开始阅读一本电子书,然后通过智能手表继续阅读,过程中可以实现阅读进度的同步和共享,大大提升了用户体验。 此外,鸿蒙注重安全性。它通过沙箱机制,将不同应用程序隔离开来,提供更加安全的应用运行环境。同时,鸿蒙还使用了多维度的安全设计,对通信、数据传输进行加密保护,防止用户隐私泄露和数据被恶意篡改。 总之,鸿蒙作为一款面向多种终端设备的分布式操作系统,具有开放、协同、共享的特点,为用户带来更好的使用体验和安全保障。随着鸿蒙的不断发展和完善,相信它将为我们的生活带来更多便捷和智能化的体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值