下载音频到公共目录的方法(HarmonyOS 鸿蒙Next)

下载音频到公共目录的方法(HarmonyOS 鸿蒙Next)

【设备信息】Mate60

【API版本】Api13

【DevEco Studio版本】5.0.7.200

【问题描述】
下载音频到公共目录的方法,有人实现过吗?
3 回复

获取公共目录路径

import featureAbility from '@ohos.ability.featureAbility';
import fileio from '@ohos.fileio';

async function getPublicAudioDirectory(): Promise<string> {
    const context = featureAbility.getContext();
    const publicDir = await context.getExternalFilesDir('Audio');
    return publicDir;
}

将音频文件写入公共目录

import fileio from '@ohos.fileio';

async function saveAudioToPublicDirectory(audioData: ArrayBuffer, fileName: string) {
    const publicDir = await getPublicAudioDirectory();
    const filePath = `${publicDir}/${fileName}`;
    const fd = await fileio.open(filePath, fileio.OpenMode.READ_WRITE | fileio.OpenMode.CREATE | fileio.OpenMode.TRUNCATE);
    const buffer = new Uint8Array(audioData);
    await fileio.write(fd, buffer);
    await fileio.close(fd);
}

更多关于下载音频到公共目录的方法(HarmonyOS 鸿蒙Next)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


可以使用这个文档 (链接) ,可以通过文件选择器(FilePicker)将文件保存到公共目录

function savePublicFile(context: Context, fileName: string, fileData: ArrayBuffer | string) {
  let saveOptions = new filePicker.DocumentSaveOptions();
  saveOptions.newFileNames = [fileName];
  let documentViewPicker = new filePicker.DocumentViewPicker(context);
  documentViewPicker.save(saveOptions).then((saveResult) => {
    if (saveResult && saveResult.length) {
      const uri = saveResult[0];
      let file = fileIo.openSync(uri, fileIo.OpenMode.READ_WRITE);
      let writeLen = fileIo.writeSync(file.fd, fileData);
      fileIo.closeSync(file);
    }
  }).catch((err: BusinessError) => {
    console.error(`Invoke documentViewPicker.save failed, code is ${err.code}, message is ${err.message}`);
  })
}

在HarmonyOS鸿蒙Next中,下载音频到公共目录可以通过使用FileManagerDownloadManager来实现。首先,确保应用具有ohos.permission.WRITE_MEDIA权限。然后,使用DownloadManager下载音频文件,指定目标路径为公共目录如MediaLibrary。下载完成后,可以通过MediaLibrary将文件保存到公共媒体库中。具体代码如下:

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

async function downloadAudioToPublicDir(url: string, fileName: string) {
    const context = getContext(this);
    const downloadConfig = {
        url: url,
        filePath: `internal://cache/${fileName}`
    };

    const downloadTask = await download.createDownload(context, downloadConfig);
    await downloadTask.start();

    const media = mediaLibrary.getMediaLibrary(context);
    const fileAsset = await media.createAsset(mediaLibrary.MediaType.AUDIO, fileName, 'DownloadedAudio');
    await fileAsset.commitModify();
}

此代码将音频文件下载到应用的缓存目录,然后将其移动到公共媒体库。

回到顶部