资源目录下的文件到沙箱的单向流动

资源目录下的文件到沙箱的单向流动

HarmonyOS
2024-05-20 21:56:17
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

在resource目录下存放的文件,无法使用文件管理接口或以沙箱路径形式处理,HarmonyOS某些接口不支持直接用到resource目录内的文件,所以需要将文件转存到本地沙箱路径里,从而实现resource内文件的能力补全。

使用的核心API

fs.openSync(path: string, mode?: number): File
fs.writeSync(fd: number, buffer: ArrayBuffer | string, options?: WriteOptions): ResourceManager。ResourceManager.numbergetRawFileContentSync(path: string): Uint8Array

核心代码解释

实现该效果主要存在以下流程,首先要从resource目录中将文件数据读取到内存,再将文件数据写到本地沙箱路径下,最后使用文件管理的接口获取到uri或者使用沙箱路径或者读取文件即可使用。

核心代码如下:

import fileUri from '@ohos.file.fileuri'; 
import common from '@ohos.app.ability.common'; 
import fs from '@ohos.file.fs'; 
 
@Entry 
@Component 
struct Index { 
  @State message string = 'Hello World'; 
  @State uri string = 
 
  build() { 
    Row() { 
      Column() { 
        Text(this.message) 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
          .onClick(() = { 
            let context = getContext(this) as common.UIAbilityContext 
            //此处context在页面侧用该方法获取 
            let filePath = context.filesDir + test.png 
            //获取rawfile里的图片arraybuffer 
            let arrayBuff = context.resourceManager.getRawFileContentSync(icon.png).buffer 
            console.log('testTag-----',arrayBuff) 
            //文件操作 
            let file = fs.openSync(filePath,fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE) 
            fs.writeSync(file.fd,arrayBuff) 
            //获取uri,使用uri来通过image展示,因为image组件目前不支持直接用路径 
            this.uri = fileUri.getUriFromPath(filePath) 
            console.log('testTag-----',filePath) 
          }) 
        Image(this.uri) 
          .width(100) 
          .height(100) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
}

总结:

主要难点在于:resource目录的设计与文件管理是分开的,所以两边不能很好地注重其互通性,结合目前已有的能力,可以通过这两个接口联动实现效果。

实现效果

注明适配的版本信息

IDE:DevEco Studio 4.1.3.500

SDK:HarmoneyOS   4.0.10.16

分享
微博
QQ
微信
回复
2024-05-22 15:44:40
相关问题
canvas怎么绘制资源目录下图片
689浏览 • 1回复 待解决
如何动态访问media目录下资源
2111浏览 • 1回复 待解决
鸿蒙如何读取resources目录下文件
3541浏览 • 1回复 待解决
java怎么读取公共目录下文件
2306浏览 • 1回复 待解决
如何获取工程目录下json文件
883浏览 • 1回复 待解决