소스 검색

fix: complete url xml

Prateek Sunal 1 년 전
부모
커밋
baeac73339
2개의 변경된 파일29개의 추가작업 그리고 9개의 파일을 삭제
  1. 15 5
      mobile/lib/utils/multipart_upload_util.dart
  2. 14 4
      mobile/lib/utils/xml_parser_util.dart

+ 15 - 5
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<String> partsURLs;
@@ -59,8 +66,6 @@ Future<void> 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<void> 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,

+ 14 - 4
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<int, String>).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());
   }
 }