提交 b51bb84c authored 作者: yueweilu's avatar yueweilu

初步下载文件

上级 f96d7ba5
......@@ -229,8 +229,8 @@ abstract class LibraryAPI {
return false;
}
/// 11、离线下载
static Future <BookDownloadModel> bookDownload({
/// 11、获取离线书籍下载地址 和 秘钥串
static Future <BookDownloadModel> getbookDownloadParam({
required String bookId,
}) async {
final result = await HttpService.to.post(
......@@ -243,7 +243,16 @@ abstract class LibraryAPI {
return BookDownloadModel.fromJson(result.data);
}
/// 12、离线重连 上传笔记、高亮、划线
/// 12、根据书籍地址下载书籍
static Future <void> downBookByUrl({
required String url,
required String savePath,
ProgressCallback? onReceiveProgress,
}) async {
await HttpService.to.download(url, savePath: savePath,onReceiveProgress: onReceiveProgress);
}
/// 13、离线重连 上传笔记、高亮、划线
static Future <bool> uploadContent({
required String bookId,
required String readTypes
......@@ -260,7 +269,7 @@ abstract class LibraryAPI {
return false;
}
/// 13、添加笔记、高亮、划线的内容
/// 14、添加笔记、高亮、划线的内容
static Future <bool> addNote({
required String bookId,
required String chapterId,
......
......@@ -304,6 +304,26 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
void _addReadTime({required type}) async{
final result = await LibraryAPI.addReadTime(bookId: bookId, readTypes: type);
}
/// 获取离线文件路径
void getBookDown() async{
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%');
}
});
}
//获取存储目录
Future<String> _getDocumentsDirectory() async {
final directory = await getApplicationDocumentsDirectory();
return directory.path;
}
///------------------------------------------ app 生命周期--------------------------------------------------------
......
......@@ -12,6 +12,7 @@ import 'package:flutter_book/utils/index.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:go_router/go_router.dart';
import 'package:path_provider/path_provider.dart';
import '../../apis/index.dart';
import '../../models/index.dart';
......
......@@ -32,7 +32,7 @@ class _ReadPageState extends State<ReadPage> {
actions: [
GestureDetector(
onTap: () {
readController.getBookDown();
},
child: Text(
'离线阅读',
......
......@@ -146,6 +146,7 @@ class HttpService extends GetxService {
try{
final requestOptions = options ?? Options();
requestOptions.headers = _getHeaders(excludeToken: excludeToken,url: url);
requestOptions.responseType = ResponseType.bytes;
await _dio.download(
url,
savePath,
......@@ -153,9 +154,10 @@ class HttpService extends GetxService {
cancelToken: cancelToken,
onReceiveProgress: onReceiveProgress
);
Console.log('Download completed:$savePath');
}catch(e){
Console.log(e);
Console.log('Error during download: $e');
rethrow;
}
}
......@@ -167,18 +169,36 @@ class HttpService extends GetxService {
class _RequestInterceptor extends Interceptor {
@override
void onResponse(Response response, ResponseInterceptorHandler handler) async {
if (response.data['code'] != 200) {
handler.reject(
DioException(
requestOptions: response.requestOptions,
response: response,
type: DioExceptionType.badResponse,
),
true,
);
}else {
super.onResponse(response, handler);
final responseData = response.data;
if (responseData is Map && responseData.containsKey('code')) {
final code = responseData['code'];
if (code != 200) {
handler.reject(
DioException(
requestOptions: response.requestOptions,
response: response,
type: DioExceptionType.badResponse,
),
true,
);
return;
}
} else if (response.requestOptions.responseType == ResponseType.bytes) {
}
super.onResponse(response, handler);
// if (response.data['code'] != 200) {
// handler.reject(
// DioException(
// requestOptions: response.requestOptions,
// response: response,
// type: DioExceptionType.badResponse,
// ),
// true,
// );
// }else {
// super.onResponse(response, handler);
// }
}
@override
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论