我已经创建了一个应用程序,它可以从google drive下载一个加密文件,并将其存储在设备的downloads文件夹中,然后使用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"
1条答案
按热度按时间cvxl0en21#
添加此权限