【发布时间】:2023-01-15 09:48:03
【问题描述】:
现在我制作了一个脚本来加密我的视频并将它们下载到应用程序存储,但是现在当我尝试下载小文件时我没有遇到任何问题,但是当我尝试下载大文件时我的应用程序卡在了99% 并花费大约 2 分钟将文件保存到应用程序存储。
`[](https://i.stack.imgur.com/W3UUu.jpg)
我的代码
`
final String url = streamInfo.url.toString();
final dir = await getApplicationDocumentsDirectory();
String appDocPath = dir.path;
print("Downloading...");
var resp = await dio.get(url,
options: Options(
responseType: ResponseType.bytes,
followRedirects: false,
),
onReceiveProgress: (recivedBytes, totalBytes) {
setState(() {
progress = recivedBytes / totalBytes;
});
},
);
print(resp.data);
var encResult = _encryptData(resp.data);
_writeData(encResult, appDocPath + '/${widget.lessoneName.toString()}.aes');
print("File downloaded successfully");`
```
```
_encryptData(str){
final encrypted = MyEncrypt.myEncrypt.encryptBytes(str,iv:MyEncrypt.myIv);
return encrypted.bytes;
}
Future<String> _writeData(str,path) async{
print("Writting data");
File f = File(path);
print(f);
await f.writeAsBytes(str);
return f.absolute.toString();
}
````
```
class MyEncrypt{
static final myKey = esc.Key.fromUtf8('TechWithVPTechWithVPTechWithVP12');
static final myIv = esc.IV.fromUtf8('VivekPanacha1122');
static final myEncrypt = esc.Encrypter(esc.AES(myKey));
}
```
【问题讨论】:
-
大文件有多大?
-
您正在按顺序做 3 件事 .. 1) 下载数据,2) 加密数据 & 3) 将加密数据写入文件 .. 您的进度指示器仅显示第 1 步 .. 因此在第 2 步和第 3 步期间冻结。
-
@EbbeM.Pedersen 那么我该如何解决这个问题
-
@GrahamD 大约 200mb
-
Ebbe 已经给了你冻结的原因。您正在下载和处理大量数据。这需要时间,没有办法解决。您需要管理您的用户体验。看看在后台可以做什么,同时让用户满意。此外,在我来自的地方,移动数据很昂贵,用户可能不喜欢使用 200mb。你需要考虑这一点。
标签: flutter encryption flutter-test