【发布时间】:2021-10-31 06:33:32
【问题描述】:
我已经添加了将文件下载到本地存储所需的所有内容,但仍然出现此错误
[错误:flutter/lib/ui/ui_dart_state.cc(209)] 未处理的异常: FileSystemException:创建失败,路径 = '/storage/emulated/0/uth_content'(操作系统错误:不允许操作, 错误号 = 1)
在清单中
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
android:requestLegacyExternalStorage="true"
android:hardwareAccelerated="true"
<application
android:requestLegacyExternalStorage="true" >
在 pubspec.yaml 中
permission_handler: ^6.1.1
我的飞镖文件
@override
Future<int> downloadZipFile() async{
Directory extStorage = await _externalDataSource.GetExtStoragePath();
if(extStorage !=null) {
var response = await _apiDataSource.downloadZipContent(extStorage.path);
File zipfile = await response.zipFile;
debugPrint("Downloaded file :" + zipfile.path + "Exist: " + zipfile.existsSync().toString());
return response.statusCode;
}
else{
debugPrint("Path is empty");
createFolder("uth_content");
}
}
Future<String> createFolder(String cow) async {
final folderName = cow;
final path = Directory("/storage/emulated/0/$folderName");
var status = await Permission.storage.status;
if (!status.isGranted) {
await Permission.storage.request();
}
if ((await path.exists())) {
return path.path;
} else {
path.create();
return path.path;
}
}
如何确保创建文件夹,我的android api是30
【问题讨论】:
-
/storage/emulated/0路径可能并不指向您认为的那样。您实际上打算在哪里创建“uth_content”文件夹? -
嗨@Abion47 是的,就是文件夹
-
/storage/emulated/0路径实际上并不存在。这是一个符号链接,可以指向不同手机上的不同事物,不一定指向外部存储中的某个位置。所以我再次问:你打算在哪里创建你的文件夹? -
在内部存储上
-
我建议您通读this article 以找到您尝试将文件写入的位置以及您需要在那里写入的权限。话虽这么说,除非您有理由在其他任何地方进行写入,否则通常最好将文件位置限制在特定于应用程序的存储中。这样,您不需要任何权限就可以在那里写入,并且如果用户卸载您的应用程序,它可以被正确清理。