HarmonyOS鸿蒙Next中如何实现录音后音频文件保存在本地/拍照后照片文件保存在本地,具体位置有没有路径要求?如何获取本地某个文件的路径(Path)

HarmonyOS鸿蒙Next中如何实现录音后音频文件保存在本地/拍照后照片文件保存在本地,具体位置有没有路径要求?如何获取本地某个文件的路径(Path) 请问:

  1. 如何实现录音后音频文件保存在本地/拍照后照片文件保存在本地,具体位置有没有路径要求?
  2. 如何获取本地某个文件的路径(Path)
3 回复
您好

1. 保存本地没有特殊的文件要求,理论上记住路径再来取就行,但是我们这边建议是放到应用的cache或者files文件夹下,他们的具体沙箱路径为

`/data/storage/el2/base/haps/app/files(/cache),其中需要注意的是如果想要将文件通过request(上传下载api)上传到服务器,必须放在cache文件夹下`

2.如果你知道文件名,例如1.txt,他在files文件夹下,你可以通过

```typescript
let context = getContext(this) as common.UIAbilityContext;
let pathDir = context.filesDir;
let dstPath = pathDir + "/1.txt";

这种方式来获取文件路径

提供一个保存文件到沙箱的demo,可以参考一下:

console.log("copyFile!")
let srcFileDescriptor = context.resourceManager.getRawFdSync(xxx.docx");
//这里填rawfile文件夹下的文件名(包括后缀)
let stat = fs.statSync(srcFileDescriptor.fd)
console.log(`stat isFile:${stat.isFile()}`);
// 通过UIAbilityContext获取沙箱地址filesDir,以Stage模型为例
let pathDir = context.filesDir;
console.log("path:", pathDir)
let dstPath = pathDir + "/2.docx";
let dest = fs.openSync(dstPath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE)
let bufsize = 4096
let buf = new ArrayBuffer(bufsize)
let off = 0, len = 0, readedLen = 0
while (len = fs.readSync(srcFileDescriptor.fd, buf, { offset: srcFileDescriptor.offset + off, length: bufsize })) {
  readedLen += len
  fs.writeSync(dest.fd, buf, { offset: off, length: len })
  off = off + len
  if ((srcFileDescriptor.length - readedLen) < bufsize) {
    bufsize = srcFileDescriptor.length - readedLen
  }
}
fs.close(dest.fd)

更多关于HarmonyOS鸿蒙Next中如何实现录音后音频文件保存在本地/拍照后照片文件保存在本地,具体位置有没有路径要求?如何获取本地某个文件的路径(Path)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙Next)中,实现录音后音频文件保存在本地或拍照后照片文件保存在本地,可以使用FileManagerMediaLibrary API。录音和拍照生成的文件默认会保存在设备的/storage/emulated/0/目录下,具体路径为:

  1. 录音文件:默认保存在/storage/emulated/0/Recordings/目录下。
  2. 照片文件:默认保存在/storage/emulated/0/DCIM/Camera/目录下。

获取本地某个文件的路径(Path),可以通过MediaLibrary API查询文件URI,然后转换为文件路径。以下是一个示例代码片段:

import mediaLibrary from '@ohos.multimedia.mediaLibrary';

async function getFilePath(fileName) {
    const media = mediaLibrary.getMediaLibrary();
    const fileKey = mediaLibrary.FileKey.DISPLAY_NAME;
    const selection = `${fileKey} = ?`;
    const selectionArgs = [fileName];
    const fetchOp = {
        selections: selection,
        selectionArgs: selectionArgs,
    };
    const fetchResult = await media.getFileAssets(fetchOp);
    const fileAsset = await fetchResult.getFirstObject();
    return fileAsset.uri;
}

在HarmonyOS鸿蒙Next中,录音和拍照后保存文件到本地可以通过以下方式实现:

  1. 录音保存

    • 使用AudioCapturer类进行录音。
    • 录音完成后,使用File类将音频数据写入到指定路径,如/storage/emulated/0/Recordings/
  2. 拍照保存

    • 使用Camera API进行拍照。
    • 拍照后,使用ImageSaver将照片保存到指定路径,如/storage/emulated/0/Pictures/
  3. 获取文件路径

    • 使用File类的getPath()方法获取文件的绝对路径。

路径没有严格限制,但建议使用公共目录以兼容性更好。

回到顶部