@@ -22,37 +22,45 @@ function New-MultipartFormContent {
2222 $Boundary = New-MultipartFormBoundary
2323 }
2424 $Boundary = ' --' + $Boundary
25+ $script :InternalBoundary = $Utf8Enc.GetBytes ($Boundary )
2526
2627 # Contents
2728 foreach ($formEntry in $FormData.GetEnumerator ()) {
28- $script :FormContent.AddRange ($Utf8Enc.GetBytes ($Boundary ))
29- $script :FormContent.AddRange ($Utf8Enc.GetBytes (" `r`n " ))
3029 AddMultipartContent - fieldName $formEntry.Key - fieldValue $formEntry.Value - enumerate $true
3130 }
3231
3332 # End boundary
34- $script :FormContent.AddRange ($Utf8Enc.GetBytes (($Boundary + ' --' )))
33+ $script :FormContent.AddRange ($script :InternalBoundary )
34+ $script :FormContent.AddRange ([byte []](45 , 45 )) # '--'
3535
3636 # Output as [byte[]]
3737 Write-Output (, $script :FormContent.ToArray ())
3838}
3939
40+ function AddMultipartBoundary {
41+ $script :FormContent.AddRange ($script :InternalBoundary )
42+ $script :FormContent.AddRange ([byte []](13 , 10 )) # "`r`n"
43+ }
44+
4045function AddMultipartContent {
4146 [OutputType ([void ])]
42- Param (
47+ param (
4348 [object ]$fieldName ,
4449 [object ]$fieldValue ,
4550 [bool ]$enumerate
4651 )
4752
4853 if ($fieldValue -is [FileInfo ]) {
54+ AddMultipartBoundary
4955 $script :FormContent.AddRange ((GetMultipartFileContent - fieldName $fieldName - file $fieldValue ))
5056 }
5157 elseif (-not $enumerate -or $fieldValue -is [string ] -or $fieldValue -isnot [IEnumerable ]) {
58+ AddMultipartBoundary
5259 $script :FormContent.AddRange ((GetMultipartStringContent - fieldName $fieldName - fieldValue $fieldValue ))
5360 return
5461 }
5562 elseif ($fieldValue -is [IDictionary ] -and $fieldValue.Type -eq ' bytes' ) {
63+ AddMultipartBoundary
5664 $script :FormContent.AddRange ((GetMultipartBytesContent - fieldName $fieldName - content $fieldValue.Content - fileName $fieldValue.FileName ))
5765 }
5866 elseif ($enumerate -and $fieldValue -is [IEnumerable ]) {
@@ -92,7 +100,7 @@ function GetMultipartStringContent {
92100 [List [byte ]]$result = [List [byte ]]::new()
93101 $result.AddRange ($Utf8Enc.GetBytes ($header ))
94102 $result.AddRange ($Utf8Enc.GetBytes ($fieldValue ))
95- $result.AddRange ($Utf8Enc .GetBytes ( " `r`n " ))
103+ $result.AddRange ([ byte []]( 13 , 10 )) # "`r`n"
96104 return , $result
97105}
98106
@@ -119,6 +127,6 @@ function GetMultipartBytesContent {
119127 [List [byte ]]$result = [List [byte ]]::new()
120128 $result.AddRange ($Utf8Enc.GetBytes ($header ))
121129 $result.AddRange ($content )
122- $result.AddRange ($Utf8Enc .GetBytes ( " `r`n " ))
130+ $result.AddRange ([ byte []]( 13 , 10 )) # "`r`n"
123131 return , $result
124132}
0 commit comments