flutter编写Linux桌面软件之如何实现url下载压缩包并解压

本文介绍了如何在Flutter中通过HTTP库下载URL资源并将其转换为ZIP文件,然后使用Archive库进行解压,以在Linux桌面应用中实现文件下载和管理功能。
摘要由CSDN通过智能技术生成

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()}");
		}
}
  • 19
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值