From 066acee41fc89abbf6067a9fe1027d7ddfe322d8 Mon Sep 17 00:00:00 2001 From: MichalFrends1 Date: Tue, 21 Apr 2026 07:50:35 +0200 Subject: [PATCH 1/3] Fixed multipart upload abort logic and missing BucketName in cleanup --- Frends.AmazonS3.UploadObject/CHANGELOG.md | 3 +++ .../Frends.AmazonS3.UploadObject.csproj | 2 +- .../UploadObject.cs | 27 +++++++------------ 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/Frends.AmazonS3.UploadObject/CHANGELOG.md b/Frends.AmazonS3.UploadObject/CHANGELOG.md index 3720809..58ac300 100644 --- a/Frends.AmazonS3.UploadObject/CHANGELOG.md +++ b/Frends.AmazonS3.UploadObject/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## [3.3.0] - 2025-10-17 +### Fixed +-Fixed missing BucketName/Key in abort cleanup, simplified loop to a single abort call, and added throw to stop swallowing exceptions. ## [3.2.0] - 2025-12-29 ### Changed diff --git a/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject.csproj b/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject.csproj index 518906f..fdecbb2 100644 --- a/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject.csproj +++ b/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject.csproj @@ -2,7 +2,7 @@ net8.0 - 3.2.0 + 3.3.0 Frends Frends Frends diff --git a/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject/UploadObject.cs b/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject/UploadObject.cs index c5e2f4e..9607ccb 100644 --- a/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject/UploadObject.cs +++ b/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject/UploadObject.cs @@ -259,28 +259,19 @@ private static async Task UploadMultipart(FileInfo file, Connection connection, } catch (Exception) { - ListPartsRequest listPartsRequest = new() + if (initResponse != null) { - UploadId = uploadRequest.UploadId - }; - - var listParts = await client.ListPartsAsync(listPartsRequest, cancellationToken); - - while (listParts.Parts.Count > 0) - { - foreach (var part in listParts.Parts) + var abortMpuRequest = new AbortMultipartUploadRequest { - AbortMultipartUploadRequest abortMpuRequest = new() - { - BucketName = input.BucketName, - Key = path, - UploadId = uploadRequest.UploadId - }; - await client.AbortMultipartUploadAsync(abortMpuRequest, cancellationToken); - } + BucketName = input.BucketName, + Key = path, + UploadId = initResponse.UploadId + }; - listParts = await client.ListPartsAsync(listPartsRequest, cancellationToken); + await client.AbortMultipartUploadAsync(abortMpuRequest, cancellationToken); } + + throw; } } From 4dda3c2aea05e6dd222a09b4acf015ff2dacf6fc Mon Sep 17 00:00:00 2001 From: MichalFrends1 Date: Tue, 21 Apr 2026 07:58:18 +0200 Subject: [PATCH 2/3] cr changes --- Frends.AmazonS3.UploadObject/CHANGELOG.md | 4 ++-- .../Frends.AmazonS3.UploadObject/UploadObject.cs | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Frends.AmazonS3.UploadObject/CHANGELOG.md b/Frends.AmazonS3.UploadObject/CHANGELOG.md index 58ac300..142383c 100644 --- a/Frends.AmazonS3.UploadObject/CHANGELOG.md +++ b/Frends.AmazonS3.UploadObject/CHANGELOG.md @@ -1,8 +1,8 @@ # Changelog -## [3.3.0] - 2025-10-17 +## [3.3.0] - 2026-04-21 ### Fixed --Fixed missing BucketName/Key in abort cleanup, simplified loop to a single abort call, and added throw to stop swallowing exceptions. +- Fixed missing BucketName/Key in abort cleanup, simplified loop to a single abort call, and added throw to stop swallowing exceptions. ## [3.2.0] - 2025-12-29 ### Changed diff --git a/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject/UploadObject.cs b/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject/UploadObject.cs index 9607ccb..aee7c56 100644 --- a/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject/UploadObject.cs +++ b/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject/UploadObject.cs @@ -259,7 +259,7 @@ private static async Task UploadMultipart(FileInfo file, Connection connection, } catch (Exception) { - if (initResponse != null) + try { var abortMpuRequest = new AbortMultipartUploadRequest { @@ -270,7 +270,10 @@ private static async Task UploadMultipart(FileInfo file, Connection connection, await client.AbortMultipartUploadAsync(abortMpuRequest, cancellationToken); } - + catch + { + // Swallow abort errors so the original exception is rethrown below. + } throw; } } From bba11690f769ed497f4c9d5fee0b84f200b9adb9 Mon Sep 17 00:00:00 2001 From: MichalFrends1 Date: Tue, 21 Apr 2026 12:53:13 +0200 Subject: [PATCH 3/3] set default multipart part size to 10 --- Frends.AmazonS3.UploadObject/CHANGELOG.md | 2 +- .../Frends.AmazonS3.UploadObject/Definitions/Connection.cs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Frends.AmazonS3.UploadObject/CHANGELOG.md b/Frends.AmazonS3.UploadObject/CHANGELOG.md index 142383c..5a4ff4f 100644 --- a/Frends.AmazonS3.UploadObject/CHANGELOG.md +++ b/Frends.AmazonS3.UploadObject/CHANGELOG.md @@ -2,7 +2,7 @@ ## [3.3.0] - 2026-04-21 ### Fixed -- Fixed missing BucketName/Key in abort cleanup, simplified loop to a single abort call, and added throw to stop swallowing exceptions. +- Fixed missing BucketName/Key in abort cleanup, simplified loop to a single abort call, added throw to stop swallowing exceptions and set default multipart part size to 10 MB. ## [3.2.0] - 2025-12-29 ### Changed diff --git a/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject/Definitions/Connection.cs b/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject/Definitions/Connection.cs index 1d45c42..145da10 100644 --- a/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject/Definitions/Connection.cs +++ b/Frends.AmazonS3.UploadObject/Frends.AmazonS3.UploadObject/Definitions/Connection.cs @@ -96,7 +96,8 @@ public class Connection /// Recommended part sizes typically range from 10 MB to 100 MB for optimal performance. /// /// 10 - public long PartSize { get; set; } + [DefaultValue(10)] + public long PartSize { get; set; } = 10; /// /// Enable/disable an AWS S3 access control list.