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

初步下载文件

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