diff --git a/mobile/lib/utils/multipart_upload_util.dart b/mobile/lib/utils/multipart_upload_util.dart index f2d7b4b49..fa3250baa 100644 --- a/mobile/lib/utils/multipart_upload_util.dart +++ b/mobile/lib/utils/multipart_upload_util.dart @@ -11,6 +11,13 @@ import "package:photos/utils/xml_parser_util.dart"; final _enteDio = NetworkClient.instance.enteDio; final _dio = NetworkClient.instance.getDio(); +class PartETag { + final int partNumber; + final String eTag; + + PartETag(this.partNumber, this.eTag); +} + class MultipartUploadURLs { final String objectKey; final List partsURLs; @@ -59,8 +66,6 @@ Future putMultipartFile( // upload individual parts and get their etags final etags = await uploadParts(urls.partsURLs, encryptedFile); - print(etags); - // complete the multipart upload await completeMultipartUpload(etags, urls.completeURL); } @@ -109,11 +114,16 @@ Future completeMultipartUpload( String completeURL, ) async { final body = convertJs2Xml({ - 'CompleteMultipartUpload': partEtags.entries.toList(), + 'CompleteMultipartUpload': partEtags.entries + .map( + (e) => PartETag( + e.key + 1, + e.value, + ), + ) + .toList(), }); - print(body); - try { await _dio.post( completeURL, diff --git a/mobile/lib/utils/xml_parser_util.dart b/mobile/lib/utils/xml_parser_util.dart index eecfc7d22..dd825fb6d 100644 --- a/mobile/lib/utils/xml_parser_util.dart +++ b/mobile/lib/utils/xml_parser_util.dart @@ -1,5 +1,6 @@ // ignore_for_file: implementation_imports +import "package:photos/utils/multipart_upload_util.dart"; import "package:xml/src/xml/entities/named_entities.dart"; import "package:xml/xml.dart"; @@ -23,17 +24,26 @@ void buildXml(XmlBuilder builder, dynamic node) { for (var item in node) { buildXml(builder, item); } - } else { + } else if (node is PartETag) { builder.element( "Part", nest: () { - builder.attribute( + builder.element( "PartNumber", - (node as MapEntry).key + 1, + nest: () { + buildXml(builder, node.partNumber); + }, + ); + builder.element( + "ETag", + nest: () { + buildXml(builder, node.eTag); + }, ); - builder.attribute("ETag", node.value); }, ); + } else { + builder.text(node.toString()); } }