HarmonyOS context.cacheDir 获取的不是internal://开头的 是真实路径?

如题:HarmonyOS context.cacheDir 获取的不是internal://开头的 是真实路径?

阅读 559
1 个回答

在HarmonyOS系统中,context.cacheDir获取的路径是应用的缓存路径,而不是内部协议路径(internal://开头的路径)。具体来说:

  • context.cacheDir获取的是应用的缓存路径,例如"/data/storage/el1/base/path/to/file.txt"。
  • 内部协议路径"internal://“用于指定调用方(即传入的context)对应的路径,例如"internal://cache/path/to/file.txt”。

因此,如果你需要获取内部协议路径,可以使用"internal://"加上相应的路径来指定文件位置。

在HarmonyOS系统中,"internal://cache"路径用于表示调用方(即传入的context)对应的缓存路径。具体来说,"internal://cache"对应的是context.cacheDir路径

目前可以使用 fs.copyFile接口,来把文件拷贝到cache目录下再进行上传

参考文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-fileio-V5\#fileiocopyfile

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/app-file-upload-download-V5

// pages/xxx.ets
import common from '@ohos.app.ability.common';
import fs from '@ohos.file.fs';
import request from '@ohos.request';
import { BusinessError } from '@ohos.base';
import { photoAccessHelper } from '@kit.MediaLibraryKit';

// 获取应用文件路径
let context = getContext(this) as common.UIAbilityContext;
let cacheDir = context.cacheDir;


@Entry
@Component
struct Index12 {
  @State message: string = 'Hello World';

  build() {
    Row() {
      Column() {

        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        Button('复制')
          .onClick(async () => {
            let uri = 'file://media/Photo/5/IMG_1718353652_004/IMG_004.jpg';
            let file = fs.openSync(uri)
            console.log('-------file',file.name)
            fs.copyFileSync(file.fd,cacheDir+"/IMG_003.jpg")
            fs.closeSync(file)
            let file1 = fs.openSync(cacheDir+"/IMG_003.jpg")
            console.log('-------file1',file1.name)
          })
      }
    }
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进