@@ -35,6 +35,7 @@ import 'dart:async';
3535import 'dart:developer' as developer;
3636import 'dart:io' ;
3737
38+ import 'package:async/async.dart' ;
3839import 'package:dartz/dartz.dart' ;
3940import 'package:data/src/network/config/endpoint.dart' ;
4041import 'package:data/src/network/dio_client.dart' ;
@@ -43,7 +44,6 @@ import 'package:data/src/network/model/query/query_parameter.dart';
4344import 'package:data/src/repository/flow/flow_response.dart' ;
4445import 'package:dio/dio.dart' ;
4546import 'package:domain/domain.dart' ;
46- import 'package:domain/src/model/async_task/async_task.dart' ;
4747
4848class FlowUploaderImpl extends FlowUploader {
4949 final DioClient _dioClient;
@@ -102,7 +102,7 @@ class FlowUploaderImpl extends FlowUploader {
102102
103103 @override
104104 Future <Flow > uploadChunk (
105- File file ,
105+ ChunkedStreamReader < int > chunkedStreamReaderFile ,
106106 int chunkNumber,
107107 int chunkSize,
108108 int currentChunkSize,
@@ -116,30 +116,51 @@ class FlowUploaderImpl extends FlowUploader {
116116 {String ? sharedSpaceId,
117117 String ? parentNodeId}
118118 ) async {
119- final _fileSize = file.lengthSync ();
120- developer.log ('uploadChunk(): chunk: $chunkNumber - currentChunkSize: $currentChunkSize ' , name: 'FlowUploaderImpl' );
121-
122- final formData = generateFormData (file, chunkNumber, chunkSize, currentChunkSize,
123- startByte, endByte, _fileSize, flowIdentifier, flowFile, totalChunk, uploadedByte,
124- onSendController, sharedSpaceId: sharedSpaceId, parentNodeId: parentNodeId);
125-
126- final response = await _dioClient.post (
127- Endpoint .flow.generateEndpointPath (),
128- data: formData,
129- options: Options (
130- headers: _getRangeHeadersForChunkUpload (startByte, endByte, _fileSize)
131- ),
132- onSendProgress: (progress, total) {
133- onSendController.add (Right (UploadingFlowUploadState (flowFile, uploadedByte + progress, flowFile.fileInfo.fileSize)));
134- }
135- );
136- final flowResponse = FlowResponse .fromJson (response);
137- developer.log ('uploadChunk(): ${flowResponse .toString ()}' , name: 'FlowUploaderImpl' );
138- return flowResponse.toFlow ();
119+ try {
120+ final _fileSize = flowFile.fileInfo.fileSize;
121+ developer.log (
122+ 'uploadChunk(): chunk: $chunkNumber - currentChunkSize: $currentChunkSize ' ,
123+ name: 'FlowUploaderImpl' );
124+
125+ final formData = generateFormData (
126+ chunkedStreamReaderFile,
127+ chunkNumber,
128+ chunkSize,
129+ currentChunkSize,
130+ startByte,
131+ endByte,
132+ _fileSize,
133+ flowIdentifier,
134+ flowFile,
135+ totalChunk,
136+ uploadedByte,
137+ onSendController,
138+ sharedSpaceId: sharedSpaceId,
139+ parentNodeId: parentNodeId);
140+
141+ final response = await _dioClient.post (
142+ Endpoint .flow.generateEndpointPath (),
143+ data: formData,
144+ options: Options (
145+ headers: _getRangeHeadersForChunkUpload (startByte, endByte, _fileSize)
146+ ),
147+ onSendProgress: (progress, total) {
148+ onSendController.add (Right (UploadingFlowUploadState (
149+ flowFile, uploadedByte + progress,
150+ flowFile.fileInfo.fileSize)));
151+ }
152+ );
153+ final flowResponse = FlowResponse .fromJson (response);
154+ developer.log ('uploadChunk(): ${flowResponse .toString ()}' , name: 'FlowUploaderImpl' );
155+ return flowResponse.toFlow ();
156+ } catch (e) {
157+ developer.log ('uploadChunk(): exception ${e }' , name: 'FlowUploaderImpl' );
158+ rethrow ;
159+ }
139160 }
140161
141162 FormData generateFormData (
142- File file ,
163+ ChunkedStreamReader < int > chunkedStreamReaderFile ,
143164 int chunkNumber,
144165 int chunkSize,
145166 int currentChunkSize,
@@ -163,7 +184,7 @@ class FlowUploaderImpl extends FlowUploader {
163184 IDENTIFIER : flowIdentifier,
164185 FILENAME : flowFile.fileInfo.fileName,
165186 RELATIVE_PATH : flowFile.fileInfo.fileName,
166- FILE : MultipartFile (file. openRead (startByte, endByte ), endByte - startByte ),
187+ FILE : MultipartFile (chunkedStreamReaderFile. readStream (currentChunkSize ), currentChunkSize ),
167188 ASYNC_TASK : true ,
168189 };
169190
@@ -192,10 +213,6 @@ class FlowUploaderImpl extends FlowUploader {
192213 );
193214
194215 developer.log ('getFlowTask(): 1' , name: 'FlowUploaderImpl' );
195- final dmm = AsyncTaskResponse .fromJson (asyncTaskJson);
196- developer.log ('getFlowTask(): 2 - $dmm ' , name: 'FlowUploaderImpl' );
197- final chot = dmm.toAsyncTask ();
198- developer.log ('getFlowTask(): 3 - $chot ' , name: 'FlowUploaderImpl' );
199- return chot;
216+ return AsyncTaskResponse .fromJson (asyncTaskJson).toAsyncTask ();
200217 }
201218}
0 commit comments