HarmonyOS鸿蒙Next中获取用户手机download目录下文件
HarmonyOS鸿蒙Next中获取用户手机download目录下文件 想要获取手机公用目录download下的文件,有什么方式吗?
看了文档,有个
ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY
允许应用访问公共目录下Download目录及子目录。
支持设备:PC/2in1 | Tablet
支持设备里面没有手机,那手机上是没有其它办法获取了吗
更多关于HarmonyOS鸿蒙Next中获取用户手机download目录下文件的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1、访问Download目录下的自己包名下的文件或文件夹
- 使用DOWNLOAD模式保存的文件,其URI已具备持久化权限,应用自身可通过系统已规划好的用户文件目录直接使用@ohos.file.fs (文件管理)的能力进行访问。
- 若需要访问其他公共目录,请使用FilePicker、授权持久化、申请使用受限权限。
示例代码_使用DOWNLOAD模式保存文件后进行访问:
import { fileIo as fs, fileUri, ListFileOptions } from '@kit.CoreFileKit';
import { bundleManager } from '@kit.AbilityKit';
@Entry
@Component
struct VisitDownloadDir {
build() {
Column({ space: 5 }) {
Button('DOWNLOAD模式访问')
.onClick(() => {
// 获取bundleName
let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION |
bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_METADATA;
let data = bundleManager.getBundleInfoForSelfSync(bundleFlags);
console.info('getBundleInfoForSelfSync successfully: ', JSON.stringify(data));
let bundleName = data.name;
// 获取Download目录下应用包名对应的path
let uri = 'file://docs/storage/Users/currentUser/Download/' + bundleName;
let fileUriObject = new fileUri.FileUri(uri);
let path = fileUriObject.path;
// 递归遍历出目录下的文件,进行业务操作(保证目录下有文件)
let listFileOption: ListFileOptions = {
recursion: true,
};
let filenames = fs.listFileSync(path, listFileOption);
for (let i = 0; i < filenames.length; i++) {
let file: fs.File | null = null;
try {
file = fs.openSync(path + '/' + filenames[i], fs.OpenMode.READ_WRITE);
console.info('file path is :', file.path);
} catch (e) {
console.error('fs.openSync failed error is : ', JSON.stringify(e));
} finally {
if (file !== null) {
fs.closeSync(file);
}
}
}
})
}
.height('100%')
.width('100%')
}
}
2、通过 ArkTS 接口获取并访问公共目录【设备目录包含的所有】
-
目录环境能力接口(ohos.file.environment)提供获取公共目录路径的能力,支持三方应用在公共文件用户目录下进行文件访问操作。
约束限制:
- 使用此方式,需确认设备具有以下系统能力:SystemCapability.FileManagement.File.Environment.FolderObtain,当前仅支持2in1设备。
权限申请:
"requestPermissions" : [ "ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY", "ohos.permission.READ_WRITE_DOCUMENTS_DIRECTORY", ]
示例代码_访问 Download 目录下的文件:
import { BusinessError } from '@kit.BasicServicesKit';
import { Environment } from '@kit.CoreFileKit';
import { fileIo as fs } from '@kit.CoreFileKit';
import { common } from '@kit.AbilityKit';
// 请在组件内获取context,确保this.getUIContext().getHostContext()返回结果为UIAbilityContext
let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
function readUserDownloadDirExample(context: common.UIAbilityContext) {
// 检查是否具有 READ_WRITE_DOWNLOAD_DIRECTORY 权限,无权限则需要向用户申请授予权限。
try {
// 获取 Download 目录
const downloadPath = Environment.getUserDownloadDir();
console.info(`success to getUserDownloadDir: ${downloadPath}`);
const dirPath = context.filesDir;
console.info(`success to get filesDir: ${dirPath}`);
// 查看 Download 目录下的文件并拷贝到沙箱目录中
let fileList: string[] = fs.listFileSync(downloadPath);
fileList.forEach((file, index) => {
console.info(`${downloadPath} ${index}: ${file}`);
fs.copyFileSync(`${downloadPath}/${file}`, `${dirPath}/${file}`);
});
// 查看沙箱目录下对应的文件
fileList = fs.listFileSync(dirPath);
fileList.forEach((file, index) => {
console.info(`${dirPath} ${index}: ${file}`);
});
} catch (error) {
const err: BusinessError = error as BusinessError;
console.error(`Error code: ${err.code}, message: ${err.message}`);
}
}
相关文档:
更多关于HarmonyOS鸿蒙Next中获取用户手机download目录下文件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
权限 ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY 的适用范围明确标注为 PC/2in1 | Tablet 设备,而手机设备暂不支持通过此权限直接访问公共Download目录
如果访问应用自身的Download子目录,应用通过 DOWNLOAD 模式保存的文件(如用户下载内容)。无需额外权限,但只能访问应用自身目录下的文件。
如果访问非自身的目录,建议通过 FilePicker 系统文件选择器,调用系统文件选择器,用户主动选择文件后获取临时访问权限。
试试这个看看
在鸿蒙(HarmonyOS)中获取用户手机Download目录下的文件,需结合权限申请、公共目录路径获取及文件操作接口实现。以下是具体实现步骤和注意事项:
- 申请访问权限
权限声明:在module.json5文件中添加权限声明:
"requestPermissions": [
"ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY"
]
动态权限申请:在代码中动态请求权限:
import abilityAccessCtrl from '@kit.AbilityKit';
let context = ... // 获取UIAbilityContext
let permissions: Array<string> = ['ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY'];
abilityAccessCtrl.createAtManager().requestPermissionsFromUser(context, permissions)
.then((data) => {
if (data.authResults === 0) {
console.info("权限申请成功");
}
});
- 获取Download目录路径使用Environment接口获取公共目录路径:
import { Environment } from '@kit.CoreFileKit';
try {
const downloadPath = Environment.getUserDownloadDir();
console.info(`Download目录路径:${downloadPath}`);
} catch (error) {
console.error(`获取路径失败:${error.code}, ${error.message}`);
}
注意:需确保设备支持SystemCapability.FileManagement.File.Environment.FolderObtain能力。
- 文件操作
3.1 通过文件选择器(FilePicker)访问文件
import picker from '@ohos.file.picker';
import fs from '@ohos.file.fs';
// 创建文件选择器实例
let documentPicker = new picker.DocumentViewPicker();
// 选择文件
documentPicker.select().then((uris) => {
let uri = uris;
let file = fs.openSync(uri, fs.OpenMode.READ_ONLY);
let content = fs.readSync(file.fd, { length: 1024 }); // 读取文件内容
console.info(`文件内容:${content}`);
fs.closeSync(file);
});
3.2 直接访问Download目录文件
import fs from '@ohos.file.fs';
import { BusinessError } from '@kit.BasicServicesKit';
// 假设已知文件路径为downloadPath + '/example.txt'
let filePath = downloadPath + '/example.txt';
try {
let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
fs.writeSync(file.fd, 'Hello, HarmonyOS!'); // 写入文件
fs.closeSync(file);
} catch (error) {
const err: BusinessError = error as BusinessError;
console.error(`文件操作失败:${err.code}, ${err.message}`);
}
- 注意事项
权限级别变更:READ_WRITE_DOWNLOAD_DIRECTORY从API 12开始权限级别为normal,需动态申请。
设备兼容性:公共目录访问接口当前仅支持2-in-1设备(如平板、PC)。
路径持久化:通过FilePicker获取的文件URI默认是临时授权,需调用fileIo.persistent接口持久化。
文件类型处理:
TXT文件:可直接通过fs.readSync读取文本。
Word文件:需解析二进制内容或依赖第三方库(如.docx解析工具)。
- 参考路径格式
Download目录默认路径:/storage/media/100/local/files/Docs/Download(具体路径可能因设备而异)。
通过HDC工具访问:使用DevEco Studio的Device File Browser可直接上传/下载文件到此目录。
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17
在HarmonyOS Next中,获取用户手机download目录下的文件,需要使用@ohos.file.fs和@ohos.file.environment模块。首先通过environment.getExternalStoragePublicDirectory获取公共下载目录路径,然后使用fs.listFile列出目录中的文件。注意,应用需在module.json5中声明ohos.permission.READ_MEDIA权限。
在HarmonyOS Next中,手机设备上访问公共下载目录(Download)的方式与PC/平板不同,主要使用用户文件访问框架(User File Access Framework)。
手机设备上,应用通常通过以下步骤访问用户文件(包括Download目录中的文件):
-
使用Picker(文件选择器):这是推荐的方式。应用可以启动系统的文件选择器(
PhotoViewPicker、DocumentViewPicker等),让用户主动选择并授权应用访问特定文件。这种方式无需声明敏感的文件读写权限,遵循了最小权限原则和用户隐私保护。- 核心模块:
@ohos.file.picker - 关键接口:例如使用
DocumentViewPicker来选择文档文件。
- 核心模块:
-
申请存储权限:如果需要更广泛的文件访问能力(例如扫描特定目录下的所有文件),可以申请以下权限,并引导用户在系统设置中手动授权:
ohos.permission.READ_MEDIA:允许读取用户外部存储中的媒体文件。ohos.permission.WRITE_MEDIA:允许写入用户外部存储中的媒体文件。- 申请这些权限后,可以通过
@ohos.file.fs等文件管理接口,使用类似路径前缀 + 相对路径(例如'download/')的方式来访问公共下载目录。但请注意,直接使用绝对路径访问可能受限,通过环境变量或特定接口获取公共目录路径是更安全可靠的做法。
总结与关键点:
- 手机设备:不直接支持
ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY权限。优先使用文件选择器(Picker) 让用户授权访问单个或多个文件。 - 如果需要后台扫描/管理:考虑申请
READ_MEDIA/WRITE_MEDIA权限,并使用HarmonyOS提供的标准文件API来访问公共目录。具体路径可通过context或环境变量获取,例如通过getExternalStorageDir()等系统方法(具体API请参考最新文档)来构建访问路径。 - 权限声明:无论使用哪种方式,如果涉及访问用户文件,通常需要在
module.json5文件中声明相应的权限(如READ_MEDIA),并在运行时动态检查并申请。
因此,在HarmonyOS Next的手机设备上,获取Download目录下文件的核心方法是:通过文件选择器由用户主动选择,或申请媒体存储权限后使用标准文件接口进行访问。请根据你的具体应用场景选择合适的方式。


