uniapp存储权限如何申请和使用
在uniapp开发中,如何正确申请和使用存储权限?具体需要哪些配置步骤?在Android和iOS平台上是否有差异?遇到权限被拒绝的情况应该如何处理?
2 回复
在uniapp中,存储权限申请需在manifest.json的App权限配置中添加android.permission.WRITE_EXTERNAL_STORAGE。使用时,通过uni.getSystemInfo判断平台,调用uni.authorize申请权限,再使用uni.saveFile或uni.getFileSystemManager进行文件操作。
在 UniApp 中,存储权限主要用于访问设备的外部存储(如 SD 卡),以读写文件。以下是申请和使用存储权限的步骤,包括代码示例。
1. 权限申请
- Android 平台:
在manifest.json文件中配置权限,并动态申请权限(Android 6.0+ 需要)。 - iOS 平台:
无需单独申请存储权限,但访问部分目录(如相册)需配置相册权限。
配置权限(manifest.json):
{
"app-plus": {
"distribute": {
"android": {
"permissions": [
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>"
]
},
"ios": {}
}
}
}
动态申请权限(Android):
使用 UniApp 的 uni.authorize 或 uni.requestPermission 方法。示例:
// 申请存储权限
uni.authorize({
scope: 'scope.writePhotosAlbum', // 注意:UniApp 中存储权限通常通过相册权限间接处理
success: () => {
console.log('权限申请成功');
},
fail: (err) => {
console.log('权限申请失败:', err);
// 可引导用户手动开启权限
}
});
// 或使用 requestPermission(部分版本支持)
uni.requestPermission({
code: 'android.permission.WRITE_EXTERNAL_STORAGE',
success: () => {
console.log('动态权限已获取');
}
});
2. 使用存储权限
申请权限后,可通过 UniApp 文件 API 读写设备存储:
// 写入文件示例
uni.downloadFile({
url: 'https://example.com/file.jpg',
success: (res) => {
if (res.statusCode === 200) {
uni.saveFile({
tempFilePath: res.tempFilePath,
success: (saveRes) => {
console.log('文件保存路径:', saveRes.savedFilePath);
}
});
}
}
});
// 读取文件示例(需确保路径可访问)
uni.getFileInfo({
filePath: 'file_path_here',
success: (info) => {
console.log('文件大小:', info.size);
}
});
注意事项:
-
Android 适配:
- 从 Android 10(API 29)开始,作用域存储(Scoped Storage)限制直接访问外部存储,建议使用
uni.saveFile或媒体库 API。 - 动态申请时,若用户拒绝,可提示手动在设置中开启。
- 从 Android 10(API 29)开始,作用域存储(Scoped Storage)限制直接访问外部存储,建议使用
-
iOS 限制:
- 只能访问应用沙箱目录和用户授权的相册,使用
uni.chooseImage等 API 时会自动触发相册权限申请。
- 只能访问应用沙箱目录和用户授权的相册,使用
-
统一处理:
使用uni.getSetting检查权限状态,根据结果引导用户操作。
总结:
- 配置权限后,动态申请(Android)并处理用户拒绝情况。
- 通过 UniApp 文件 API 安全读写,避免直接操作路径。
- 测试时需在真机运行,模拟器可能无法完全模拟权限行为。
如需更复杂操作(如自定义文件路径),可结合 uni.getFileSystemManager() 使用,但需注意平台兼容性。

