flutter编写Linux桌面软件之如何实现url下载压缩包并解压
分为两个步骤
1、下载,在本地生成zip文件;
2、解压;
下载
import 'package:http/http.dart' as http;
import 'package:path_provider/path_provider.dart';
...
Future<File?> queryTTS(String version)async{
dynamic response;
final clinet = http.Client();
try {
final queryParameters={
...
};
response = await client.send(http.Request("GET",Uri.parse('https://...').replace(queryParameters:queryParameters)));
if(response ==null){
throw "response is null";
}
if(response is! IOStreamdResponse){
throw "response is not IOStreamResponse";
}
final appDirectory = await getApplicationDocumentsDirectory();
final zipDirectory = Directory("${appDirectory.path}/myApp");
if(!zipDirectory.exitsSync()){
await zipDirectory.create(recursive:true);
}
final file = File("${zipDirectory.path}/tts.zip");
if(file.existsSysnc()){
await file.delete();
}
final fileStream = file.openWrite();
await response.stream.pipe(fileStream);
await fileStream.flush();
await fileStream.close();
return file;
}catch (e,stackTrace){
debugePrint("query tts take error: ${e.toString()}");
return null;
}
}
解压
import 'package:archive/archive.dart';
Future<void> unzipTTS()async{
try {
final zipPackage = await queryTTS();
if(zipPackage==null){
throw "zipPackage is null";
final bytes = await zipPackage.readAsBytes();
final archive = ZipDecoder().decodeBytest(bytes);
final appDirectory = await getApplicationDocumentsDirectory();
final zipDirectory = Directory("${appDirectory.path}/myApp");
if(!zipDirectory.exitsSync()){
await zipDirectory.create(recursive:true);
}
for(var myFile in archive){
final fileName = '${zipDirectory.path}/tts/${myFile.name}';
if(myFile.isFile){
fianl outFile = File(fileName);
if(!outFile.existsSync()){
await outFile.create(recursive:true);
}
await outFile.writeAsByest(myFile.content);
}
}catch (e,stackTrach) {
print("{e.toString()}");
}
}