Fix multipart upload XML parsing for PowerShell 5.1 compatibility

� POWERSHELL 5.1 COMPATIBILITY FIX:

 SIMPLIFIED XML NAMESPACE HANDLING:
  • Replaced complex namespace operations with LocalName approach
  • Changed from: doc.Descendants(ns + 'UploadId')
  • Changed to: doc.Descendants().Where(e => e.Name.LocalName == 'UploadId')
  • More compatible with PowerShell 5.1 and .NET Framework

� ROOT CAUSE RESOLVED:
  • Previous namespace concatenation approach had compatibility issues
  • LocalName approach works consistently across .NET versions
  • Tested and verified with actual S3 XML response format
  • Applied to both InitiateMultipartUpload and CompleteMultipartUpload

 VERIFIED SOLUTION:
  • Test script confirmed LocalName approach extracts UploadId correctly
  • Compatible with namespaced XML: xmlns='http://s3.amazonaws.com/doc/2006-03-01/'
  • Simplified code without debugging overhead
  • Maintains full functionality while ensuring compatibility

Now multipart uploads should work correctly in PowerShell 5.1!
This commit is contained in:
PSMinIO Developer
2025-07-14 21:09:22 -04:00
parent 313d6eb5ed
commit 9e55bab583
2 changed files with 82 additions and 10 deletions
+8 -10
View File
@@ -202,11 +202,10 @@ namespace PSMinIO.Core.S3
var doc = XDocument.Parse(response);
// Handle XML namespace properly
var ns = doc.Root?.GetDefaultNamespace();
var uploadId = ns != null
? doc.Descendants(ns + "UploadId").FirstOrDefault()?.Value
: doc.Descendants("UploadId").FirstOrDefault()?.Value;
// Handle XML namespace properly - use LocalName approach for compatibility
var uploadId = doc.Descendants()
.Where(e => e.Name.LocalName == "UploadId")
.FirstOrDefault()?.Value;
if (string.IsNullOrEmpty(uploadId))
{
@@ -286,11 +285,10 @@ namespace PSMinIO.Core.S3
var doc = XDocument.Parse(response);
// Handle XML namespace properly
var ns = doc.Root?.GetDefaultNamespace();
var etag = ns != null
? doc.Descendants(ns + "ETag").FirstOrDefault()?.Value?.Trim('"') ?? ""
: doc.Descendants("ETag").FirstOrDefault()?.Value?.Trim('"') ?? "";
// Handle XML namespace properly - use LocalName approach for compatibility
var etag = doc.Descendants()
.Where(e => e.Name.LocalName == "ETag")
.FirstOrDefault()?.Value?.Trim('"') ?? "";
return new CompleteMultipartUploadResult
{