提交 137e992f authored 作者: yueweilu's avatar yueweilu

解压

上级 7547ba58
......@@ -124,7 +124,7 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
// 开启录音
void record() async {
startRecording = true;
String filePath = await _getDocumentsDirectory();
String filePath = await _getDirectory();
String fileName = generateVoiceFileName();
_mRecorder.startRecorder(
......@@ -236,41 +236,41 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
// 话题
if (chatType == 0){
final result = await addDiscuss();
final result = await addDiscuss(contentMap);
return result;
}
// 笔记
else if (chatType == 1){
final result = addNote();
final result = addNote(contentMap);
return result;
}
return false;
}
// 添加笔记
Future<bool> addNote() async {
// 音频链接数组
List<String> audios = [];
// 图片链接数组
List<String> images = [];
// 循环上传图片获取地址
for(String path in discussInputImages){
final url = await upload(path: path);
images.add(url);
}
// 循环上传音频获取地址
for(String path in discussInputAudios){
final url = await upload(path: path);
audios.add(url);
}
Map<String,dynamic> contentMap = {
'text':contentInput.text,
'audio':audios,
'image':images
};
Future<bool> addNote(Map<String,dynamic> contentMap) async {
//
// // 音频链接数组
// List<String> audios = [];
// // 图片链接数组
// List<String> images = [];
//
// // 循环上传图片获取地址
// for(String path in discussInputImages){
// final url = await upload(path: path);
// images.add(url);
// }
//
// // 循环上传音频获取地址
// for(String path in discussInputAudios){
// final url = await upload(path: path);
// audios.add(url);
// }
// Map<String,dynamic> contentMap = {
// 'text':contentInput.text,
// 'audio':audios,
// 'image':images
// };
final result = await LibraryAPI.addNote(
bookId: bookId,
......@@ -286,29 +286,29 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
// 发表评论
// {String commentId ='0',String quoteContent ='',String title = ''}
Future<bool> addDiscuss() async{
// 音频链接数组
List<String> audios = [];
// 图片链接数组
List<String> images = [];
// 循环上传图片获取地址
for(String path in discussInputImages){
final url = await upload(path: path);
images.add(url);
}
// 循环上传音频获取地址
for(String path in discussInputAudios){
final url = await upload(path: path);
audios.add(url);
}
Map<String,dynamic> contentMap = {
'text':contentInput.text,
'audio':audios,
'image':images
};
Future<bool> addDiscuss(Map<String,dynamic> contentMap) async{
// // 音频链接数组
// List<String> audios = [];
// // 图片链接数组
// List<String> images = [];
//
// // 循环上传图片获取地址
// for(String path in discussInputImages){
// final url = await upload(path: path);
// images.add(url);
// }
//
// // 循环上传音频获取地址
// for(String path in discussInputAudios){
// final url = await upload(path: path);
// audios.add(url);
// }
//
// Map<String,dynamic> contentMap = {
// 'text':contentInput.text,
// 'audio':audios,
// 'image':images
// };
final result = await LibraryAPI.addDiscuss(
bookId: bookId,
......@@ -397,20 +397,46 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
final result = await LibraryAPI.getbookDownloadParam(bookId: bookId);
Console.log('----------_getBookDown------------------${result.download}');
final String savePath = await _getDocumentsDirectory();
LibraryAPI.downBookByUrl(url: result.download!,savePath: '$savePath$bookId.zip',onReceiveProgress: (int received,int total){
if (total !=-1){
double progress = (received / total) * 100;
Console.log('Download progress: $progress%');
// final String savePath = await _getDirectory();
// LibraryAPI.downBookByUrl(url: result.download!,savePath: '$savePath$bookId.zip',onReceiveProgress: (int received,int total){
// if (total !=-1){
// double progress = (received / total) * 100;
// Console.log('Download progress: $progress%');
// }
// });
extractZipFileFromCache(result.download!);
}
Future<void> extractZipFileFromCache(String url) async {
// 从缓存中获取 ZIP 文件
var file = await DefaultCacheManager().getSingleFile(url);
if (file != null) {
// 读取 ZIP 文件内容
Uint8List bytes = await file.readAsBytes();
// 解压缩 ZIP 文件
Archive archive = ZipDecoder().decodeBytes(bytes);
// 获取设备上的临时目录
Directory? tempDir = await getExternalStorageDirectory();
// 将解压缩后的文件保存到临时目录中
for (var file in archive) {
if (file.isFile) {
String fileName = file.name;
String filePath = '${tempDir!.path}/$bookId/$fileName';
File(filePath)
..createSync(recursive: true)
..writeAsBytesSync(file.content as List<int>);
print('解压缩文件:$fileName,保存路径:$filePath');
}
}
} else {
print('未找到缓存中的文件或文件不存在');
}
});
}
//获取存储目录
Future<String> _getDocumentsDirectory() async {
Future<String> _getDirectory() async {
// getTemporaryDirectory
final directory = await getExternalStorageDirectory();
return directory!.path;
......
......@@ -2,11 +2,15 @@ library web;
import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'package:archive/archive.dart';
import 'package:audio_session/audio_session.dart';
import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.dart';
import 'package:flutter_book/theme.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_book/utils/index.dart';
import 'package:flutter_oss_aliyun/flutter_oss_aliyun.dart';
......
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
archive:
dependency: "direct main"
description:
name: archive
sha256: "22600aa1e926be775fa5fe7e6894e7fb3df9efda8891c73f70fb3262399a432d"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.4.10"
args:
dependency: transitive
description:
......
......@@ -109,6 +109,8 @@ dependencies:
just_audio: ^0.9.36
# 缓存
flutter_cache_manager: ^3.3.1
# 解压
archive: ^3.1.2
dev_dependencies:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论