From 7c2ce513df516fa731d4fddcf7dfad5582227807 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Thu, 5 Sep 2024 14:10:26 +0530 Subject: [PATCH] [mob] Additional check for fileSize for multipart upload --- mobile/lib/db/upload_locks_db.dart | 2 ++ mobile/lib/module/upload/model/multipart.dart | 2 ++ mobile/lib/module/upload/service/multipart.dart | 8 +++++++- mobile/lib/utils/file_uploader.dart | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/mobile/lib/db/upload_locks_db.dart b/mobile/lib/db/upload_locks_db.dart index b32084b6ff..0c4b112634 100644 --- a/mobile/lib/db/upload_locks_db.dart +++ b/mobile/lib/db/upload_locks_db.dart @@ -250,6 +250,7 @@ class UploadLocksDB { } final row = rows.first; final objectKey = row[_trackUploadTable.columnObjectKey] as String; + final encFileSize = row[_trackUploadTable.columnEncryptedFileSize] as int; final partsStatus = await db.query( _partsTable.table, where: '${_partsTable.columnObjectKey} = ?', @@ -285,6 +286,7 @@ class UploadLocksDB { .byName(row[_trackUploadTable.columnStatus] as String), partUploadStatus: partUploadStatus, partETags: partETags, + encFileSize: encFileSize, partSize: row[_trackUploadTable.columnPartSize] as int, ); } diff --git a/mobile/lib/module/upload/model/multipart.dart b/mobile/lib/module/upload/model/multipart.dart index cda72d141c..94a97ebc36 100644 --- a/mobile/lib/module/upload/model/multipart.dart +++ b/mobile/lib/module/upload/model/multipart.dart @@ -33,6 +33,7 @@ class MultipartInfo { final List? partUploadStatus; final Map? partETags; final int? partSize; + final int encFileSize; final MultipartUploadURLs urls; final MultipartStatus status; @@ -41,6 +42,7 @@ class MultipartInfo { this.partETags, this.partSize, this.status = MultipartStatus.pending, + required this.encFileSize, required this.urls, }); } diff --git a/mobile/lib/module/upload/service/multipart.dart b/mobile/lib/module/upload/service/multipart.dart index c623b53074..f31e30248c 100644 --- a/mobile/lib/module/upload/service/multipart.dart +++ b/mobile/lib/module/upload/service/multipart.dart @@ -148,10 +148,11 @@ class MultiPartUploader { Future putMultipartFile( MultipartUploadURLs urls, File encryptedFile, + int fileSize, ) async { // upload individual parts and get their etags final etags = await _uploadParts( - MultipartInfo(urls: urls), + MultipartInfo(urls: urls, encFileSize: fileSize), encryptedFile, ); @@ -180,6 +181,11 @@ class MultiPartUploader { } final int encFileLength = encryptedFile.lengthSync(); + if (encFileLength != partInfo.encFileSize) { + throw Exception( + "File size mismatch. Expected ${partInfo.encFileSize} but got $encFileLength", + ); + } // Start parts upload int count = 0; while (i < partsLength) { diff --git a/mobile/lib/utils/file_uploader.dart b/mobile/lib/utils/file_uploader.dart index 3f6540465e..e0e403eff7 100644 --- a/mobile/lib/utils/file_uploader.dart +++ b/mobile/lib/utils/file_uploader.dart @@ -685,6 +685,7 @@ class FileUploader { fileObjectKey = await _multiPartUploader.putMultipartFile( fileUploadURLs, encryptedFile, + encFileSize, ); } // in case of multipart, upload the thumbnail towards the end to avoid