diff --git a/Module/PSMinIO/bin/PSMinIO.dll b/Module/PSMinIO/bin/PSMinIO.dll index fac9dca..81d28e1 100644 Binary files a/Module/PSMinIO/bin/PSMinIO.dll and b/Module/PSMinIO/bin/PSMinIO.dll differ diff --git a/src/Core/S3/MultipartUploadManager.cs b/src/Core/S3/MultipartUploadManager.cs index c64cb5e..a5dcf8b 100644 --- a/src/Core/S3/MultipartUploadManager.cs +++ b/src/Core/S3/MultipartUploadManager.cs @@ -62,6 +62,9 @@ namespace PSMinIO.Core.S3 _progressCollector.QueueProgressUpdate(2, "File Upload", $"Uploading {fileInfo.Name} ({SizeFormatter.FormatBytes(totalSize)})", 0, 1); + // Process initial progress updates + _progressCollector.ProcessQueuedUpdates(); + var uploadId = resumeUploadId; var parts = new ConcurrentDictionary(); var operationStartTime = DateTime.UtcNow; @@ -94,6 +97,9 @@ namespace PSMinIO.Core.S3 _progressCollector.QueueVerboseMessage("Upload configuration - Chunk size: {0}, Total parts: {1}, Max parallel: {2}", SizeFormatter.FormatBytes(effectiveChunkSize), totalParts, _maxParallelUploads); + // Process verbose messages and progress updates + _progressCollector.ProcessQueuedUpdates(); + // Upload parts in parallel var uploadTasks = new List(); var semaphore = new SemaphoreSlim(_maxParallelUploads, _maxParallelUploads); @@ -134,6 +140,9 @@ namespace PSMinIO.Core.S3 _progressCollector.QueueVerboseMessage("Completed part {0}/{1} ({2})", partNum, totalParts, SizeFormatter.FormatBytes(partSize)); + + // Process progress updates immediately + _progressCollector.ProcessQueuedUpdates(); } finally { @@ -162,6 +171,9 @@ namespace PSMinIO.Core.S3 _progressCollector.QueueProgressCompletion(2, "File Upload", 1); _progressCollector.QueueProgressCompletion(1, "Multipart Upload Collection"); + // Process final progress updates + _progressCollector.ProcessQueuedUpdates(); + return new MultipartUploadResult { BucketName = bucketName,