Как правильно посчитать Content-Length в powershell?

При попытке передать файл через Invoke-WebRequest я рассчитываю количество байт для body:

    $boundary = '**********************************************************************'
#$boundary = [System.Guid]::NewGuid().ToString()
$fileBin = [System.IO.File]::ReadAllbytes($filePath)
$filestr64 = [System.Convert]::ToBase64String($fileBin) #-Если потребуется конвертировать в base64
$LF = "`r`n"
$filebin2 = [System.Text.Encoding]::UTF8.GetBytes($fileBin);

$bodyLines = (
    "--$boundary",
    "Content-Disposition: form-data; name=`"@file`"; filename=`"$fileName`"",
    "Content-Type: multipart/x-zip$LF",
    "$filebin",
    "--$boundary--$LF"
) -join $LF
$bodylenght = $bodylines.Length#$bodylines.lenght +$fileBin.Count
$bodylenght2=$fileBin.Count
$ConstBody = '245'
$bodylenght3=$bodylenght2+$ConstBody
$bodylenght2 | Out-File $Out -Append
#$bodyLines | Out-File $Out2 -Append
$bodylenght | Out-File $Out -Append 
#$filebin | Out-File $Out -Append
$Headers = @{
            "Content-Length"=$bodylenght#$bodylenght3
            "Content-Type"="multipart/form-data; boundary=$boundary"
            }
Invoke-WebRequest -Uri $uri -Headers $Headers  -Method  Post -ContentType "multipart/form-data; boundary=`"$boundary`""  -Body $bodyLines -TimeoutSec 600 #-OutFile $out

Но я не уверен правильно ли powershell рассчитывает длину. Если считаю отдельно, например, для $bodyLines без $filebin и отдельно для $filebin, то получаю $bodyLines = 245 байт и $filebin= 28668103 байта. Итого 28668348 байта, что похоже на правду (размер файла 27,3 mb). Но если считать сразу $bodyLines то получаем размер 103671435

    $bodyLines = (
    "--$boundary",
    "Content-Disposition: form-data; name=`"@file`"; filename=`"$fileName`"",
    "Content-Type: multipart/x-zip$LF",
    "$filebin",
    "--$boundary--$LF"
) -join $LF

   $bodylenght = $bodylines.Length

Вопрос, как правильно посчитать количество байт в $bodyLines?


Ответы (0 шт):