下载音频到公共目录的方法(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中,下载音频到公共目录可以通过使用FileManager
和DownloadManager
来实现。首先,确保应用具有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();
}
此代码将音频文件下载到应用的缓存目录,然后将其移动到公共媒体库。