HarmonyOS 鸿蒙Next 如何创建一个app可访问的文件夹
HarmonyOS 鸿蒙Next 如何创建一个app可访问的文件夹 目前的视频、音频如果需要访问,都需要单独指定或者放到app的沙箱里面,如何可以做到像百度网盘那种,可以设置一个app自己的文件夹,后续可以随时访问这个文件夹的内容。
如果想要在共享目录下创建文件,可以利用DataAbilityHelper来实现,您可以参考下论坛中的案例:
https://developer.huawei.com/consumer/cn/forum/topic/0202539819343000037?fid=0101587866109860105
参考下以下示例中的沙箱目录文件写入公共目录部分:
import { BusinessError, request } from '@kit.BasicServicesKit';
import picker from '@ohos.file.picker';
import fs from '@ohos.file.fs';
import { common } from '@kit.AbilityKit';
import { buffer } from '@kit.ArkTS';
@Entry
@Component
struct DocumentSave {
@State message: string = '下载文件';
build() {
RelativeContainer() {
Text(this.message)
.id('DocumentSaveHelloWorld')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.fontColor(Color.Pink)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
.onClick(() =>{
const context = getContext(this);
const downloadUrl = '文件链接名.pdf';
try {
request.downloadFile(context, {
enableMetered: true,
url: downloadUrl,
filePath: context.filesDir + '/aa.pdf'
}).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 = ["aaa.pdf"]; // 保存文件名(可选)
const documentViewPicker = new picker.DocumentViewPicker;
documentViewPicker.save(documentSaveOptions)
.then(async (documentSaveResult) =>{
// 获取到到图片或者视频文件的URI后进行文件读取等操作
let uri = documentSaveResult[0];
console.info('pub uri:' + uri)
// 沙箱路径文件
let sanFile = fs.openSync(context.filesDir+ '/aa.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}`);
}
})
}
.height('100%')
.width('100%')
}
}
不需要其他申请权限,有网络权限ohos.permission.INTERNET就可以了。
更多关于HarmonyOS 鸿蒙Next 如何创建一个app可访问的文件夹的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我把文件放到指定文件夹,是否可以通过上述方法直接获取。谢谢,
可以通过picker直接读取,不需要授权:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/select-user-file-V5
期待HarmonyOS能在未来带来更多创新的技术和理念。
这个每次都要重新选择,我看了一下,更新了有授权持久化的方法了,我看看是否可以用,感谢回答。
楼主你指的是像NEXT系统的百度网盘那样在Download目录创建一个百度网盘文件夹吗
是的,后续我把视频和音频放到这个文件夹下面,是不是就不用再授权,直接使用了。
不授权直接读取只能通过安全picker,参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/select-user-file-V5
自己写一个文件管理软件即可。
在HarmonyOS(鸿蒙)系统中,创建一个应用可访问的文件夹通常涉及文件系统访问权限的管理。以下是如何实现这一点的简要说明:
HarmonyOS提供了沙盒机制来管理应用的文件存储。每个应用都有自己的私有存储区域,位于/data/data/<包名>/
目录下。若应用需要访问或创建特定文件夹,应在该私有存储区域内操作。
-
确定文件夹路径:首先,确定你希望在应用的私有存储中创建的文件夹路径。例如,可以是一个名为
MyFolder
的文件夹。 -
使用文件API创建文件夹:利用HarmonyOS提供的文件操作API(如
File
类或其等价物),在应用的私有存储中创建文件夹。这通常涉及调用创建目录的方法,并指定目标路径。 -
处理权限:由于操作是在应用的私有存储中进行,通常不需要额外的存储权限。但如果需要访问公共存储或其他应用的存储,则需申请相应权限并处理用户授权。
-
访问文件夹:创建成功后,应用即可通过指定路径访问该文件夹,进行文件的读写操作。
请注意,具体的API调用和代码实现可能随HarmonyOS版本而异。建议查阅最新的HarmonyOS开发文档以获取详细信息和示例代码。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html,