uploadPart method
Implementation
Future<ETagResponse> uploadPart(int me, List<int> chunk) async {
log.info(" Upload part $me size ${chunk.length}");
Dio _dio = Dio(
BaseOptions(baseUrl: params.apiBasePath!, headers: {
"Authorization": "Bearer ${params.apiToken}",
}),
);
final stream = Stream<List<int>>.fromIterable(
chunk.chunked(1024 * 1024).map((e) => [...e])).asBroadcastStream();
var resp = await _dio.post<Map<String, dynamic>>(
"/uploads/$uploadId/parts",
data: stream,
onSendProgress: (completed, outof) async {
log.info(" Buffered $completed/$outof bytes");
sendUpdate(message: "Buffered $completed/$outof bytes");
_bytesProcessed[me] = completed;
await notifyProgress();
},
onReceiveProgress: (completed, outof) async {
log.info(" Received $completed/$outof bytes");
sendUpdate(message: "Received $completed/$outof bytes");
},
options: Options(
contentType: "application/octet-stream",
method: "POST",
headers: {
Headers.contentLengthHeader: chunk.length,
"partnumber": me,
"pathname": params.keyName,
},
),
);
var etag = ETagResponse.fromJson(resp.data);
message = "Completed upload for part: ${_currentPart - 1}";
_bytesProcessed[me] = chunk.length;
notifyProgress();
log.info(" -> $me: ${etag.partName}");
return etag;
}