HarmonyOS 鸿蒙Next 缓存文件至公共目录
HarmonyOS 鸿蒙Next 缓存文件至公共目录
有大佬清楚缓存文件如何至公共目录吗?
2 回复
import { BusinessError, request } from '@kit.BasicServicesKit';
import picker from '@ohos.file.picker';
import fs from '@ohos.file.fs';
import { fileIo, fileUri } from '@kit.CoreFileKit';
@Entry
@Component
struct FileCover {
build() {
RelativeContainer() {
Column({ space: 5 }) {
Button('保存').onClick(() => {
const context = getContext(this);
const downloadUrl = 'https://www.icbccs.com.cn/upload/829/File/201905/zhixiaodianzixieyi.pdf';
let dirPath = context.filesDir
let fileName = 'b.pdf'
//防止沙箱重名导致下载失败
if (fileIo.accessSync(`${dirPath}/${fileName}`)) {
fileIo.rmdirSync(`${dirPath}/${fileName}`)
}
try {
request.downloadFile(context, {
enableMetered: true,
url: downloadUrl,
filePath: `${dirPath}/${fileName}`
}).then((downloadTask: request.DownloadTask) => {
downloadTask.on('fail', (err: number) => {
console.error(`Failed to download the task. Code: ${err}`);
});
downloadTask.on('progress', (receivedSize: number, totalSize: number) => {
console.log('download', "receivedSize:" + (receivedSize / 1024) + " totalSize:" + (totalSize / 1024));
});
downloadTask.on('complete', () => {
//将文件复制到文件夹中
const documentSaveOptions = new picker.DocumentSaveOptions(); // 创建文件管理器保存选项实例
documentSaveOptions.newFileNames = ["b.pdf"]; // 保存文件名(可选)
const documentViewPicker = new picker.DocumentViewPicker;
documentViewPicker.save(documentSaveOptions)
.then(async (documentSaveResult) => {
// 获取到到图片或者视频文件的URI后进行文件读取等操作
let uri = documentSaveResult[0];
console.info('pub uri:' + uri)
console.log('保存=======' + context.filesDir)
// 沙箱路径文件
let sanFile = fs.openSync(context.filesDir + '/b.pdf', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
let pubFile = fs.openSync(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
// 将文件从沙箱路拷贝到公共路径
fs.copyFileSync(sanFile.fd, pubFile.fd)
console.log("-------")
})
console.log('下载完成')
})
}
// 下载完成
)
.catch((err: BusinessError) => {
console.error(`Invoke downloadTask failed, code is ${err.code}, message is ${err.message}`);
});
} catch (error) {
let err: BusinessError = error as BusinessError;
console.error(`Invoke downloadFile failed, code is ${err.code}, message is ${err.message}`);
}
})
}
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
}
.height('100%')
.width('100%')
}
}
更多关于HarmonyOS 鸿蒙Next 缓存文件至公共目录的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS 鸿蒙Next系统中,缓存文件至公共目录的操作主要涉及到文件系统API和权限管理。以下步骤简述了如何实现这一过程:
-
权限声明:首先,在应用的
config.json
文件中声明对外部存储的访问权限,确保应用有权写入公共目录。 -
获取公共目录路径:使用HarmonyOS提供的文件系统API,通过
FilePicker
或MediaStore
等接口获取公共目录的路径。例如,可以通过MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
等URI访问特定类型的公共目录。 -
创建并写入缓存文件:在获取到公共目录路径后,使用文件I/O操作(如
FileOutputStream
等,但注意这里不直接涉及Java或C语言的具体实现)在指定路径下创建文件,并将缓存数据写入该文件。 -
处理权限变化:注意处理用户可能随时撤销存储权限的情况,确保应用在权限变化时能够妥善处理。
-
错误处理:对于文件操作中的异常,如路径不存在、权限不足等,需要进行适当的错误处理。
完成以上步骤后,应用应能将缓存文件成功保存至公共目录。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html