【问题标题】:Flutter OS Error: Permission denied, errno = 13Flutter 操作系统错误:权限被拒绝,errno = 13
【发布时间】:2023-02-14 21:50:07
【问题描述】:

我创建了一个应用程序,可以从谷歌驱动器下载加密文件并将其存储在设备下载文件夹中。然后它解密(使用 aes_crypt_null_safe 包)该文件并将其存储为纯文本文件。下面是两个函数。

从驱动器下载

Future<void> downloadFromDrive(String fName, String gdID) async {
var client = GoogleAuthClient(authHeaders);
var ga = drive.DriveApi(client);
drive.Media file = await ga.files
    .get(gdID, downloadOptions: drive.DownloadOptions.fullMedia) as Media;
print(file.stream);

final directory = await getExternalStorageDirectory();
print(directory?.path);
final saveFile =
    File('/storage/emulated/0/Download/test_gdrive_download.txt.aes');
List<int> dataStore = [];
file.stream.listen((data) {
  print("DataReceived: ${data.length}");
  dataStore.insertAll(dataStore.length, data);
}, onDone: () async {
  print("Task Done");
  await saveFile.writeAsBytes(dataStore);
  print("File saved at ${saveFile.path}");
}, onError: (error) {
  print("Some Error");
});
await Future.delayed(const Duration(seconds: 3), () {
});
}

解密

decryptJsonFile({required String srcPath, required String destPath}) async {
crypt.decryptFileSync(srcPath, destPath);
}

调用两个函数

   onPressed: () async {
                print("Downloading file from drive...");
                await downloadFromDrive("ideas", fileId.toString());
                print("Decrypting the file downloaded from drive...");
                await decryptJsonFile(
                    srcPath: '/storage/emulated/0/Download/test_gdrive_download.txt.aes',
                    destPath: '/storage/emulated/0/Download/decrypted_file.txt');
              },

当我尝试触发这些功能时,它会完美下载文件并将其存储在下载文件夹中,但是当我尝试解密时出现以下错误,

[ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: FileSystemException: Failed to open /storage/emulated/0/Download/test_gdrive_download.txt.aes for writing., path = '/storage/emulated/0/Download/decrypted_file.txt' (OS Error: Permission denied, errno = 13)

我已经在我的 android 清单文件中提供了所有必需的权限

    <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"/>

android:requestLegacyExternalStorage="true"

【问题讨论】:

  • 您需要向用户询问存储访问权限以允许访问存储读写

标签: flutter dart android-external-storage


【解决方案1】:

添加此权限

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-19
    • 2016-12-25
    • 1970-01-01
    • 2022-09-27
    • 2021-03-05
    • 1970-01-01
    • 2021-07-11
    • 2015-02-19
    相关资源
    最近更新 更多