Powershell загружает PDF-файл, используя граничный MIME, в веб-службу RightFax - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь загрузить файл PDF в факс Right через веб-интерфейс RightFax. Я могу сделать это через PostMan, и я могу отправить вложение позже. Когда я пытаюсь сделать загрузку через PowerShell и отправляю свое вложение, я получаю только имя объекта в фактическом факсе, например. Система. Net .Http.StreamContent. Вот мой заимствованный код PowerShell:

Add-Type -AssemblyName System.Net.Http

$AuthURL = "http://" + $RESTAPIServer + "/RightFax/API"
$BaseURL = "http://" + $RESTAPIServer + "/RightFax/API/SendJobs"
$AttachURL = "http://" + $RESTAPIServer + "/RightFax/API/Attachments"
$Base = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($RESTAPIUser+":"+$RESTAPIPassword))
$vCenterSessionURL = $BaseAuthURL 

$Header = @{"Authorization" = "Basic "+[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($RESTAPIUser+":"+$RESTAPIPassword))}
     $TARGET_FOLDER_PATH = "\\SomeFolderPath\"
     $TokenUri = "http://" + $RESTAPIServer + "/RightFax/API/Login?rememberMe={rememberMe}"

$Token = Invoke-RestMethod -Method GET -Headers $Header -Uri $TokenUri 

 Get-ChildItem $TARGET_FOLDER_PATH -Filter *.pdf  |
 Foreach-Object {

                  $TARGET_FILE_NAME = $_.Name
                  $LDA_TARGET_FILE_NAME = $TARGET_FOLDER_PATH + $TARGET_FILE_NAME 

                  $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
                  $headers.Add("Authorization", "Basic $Base")


                  $fileName = $TARGET_FILE_NAME
                  $uri = $AttachURL
                  $filePath = $LDA_TARGET_FILE_NAME

                  $FileStream = [System.IO.FileStream]::new($filePath, [System.IO.FileMode]::Open)
                  $fileContent = [System.Net.Http.StreamContent]::new($FileStream)
                  $boundary = [System.Guid]::NewGuid().ToString()

                  $LF = "`r`n"
                  $bodyLines = (
                                "--$boundary",
                                "Content-Disposition: attachment; name=`"$fileName`"; filename=`"$filePath`"",
                                "Content-Type: application/octet-stream",
                                "Content-Transfer-Encoding: base64$LF",
                                $fileContent, 
                                "--$boundary--$LF"
                   ) -join $LF 

    $Attach = Invoke-RestMethod -Uri $uri -Headers $headers -Method Post -ContentType "multipart/form-data; boundary=`"$boundary`"" -Body $bodyLines #-InFile $filePath
    write-host $Attach
    $FileStream.Dispose()
    $fileContent.Dispose()
}

1 Ответ

0 голосов
/ 01 мая 2020

Я понял это. Мне нужно было закодировать файл. Для тех из вас, кто на самом деле здесь, чтобы получить помощь, а не здесь, чтобы играть в полицию за посты других пользователей, но не забывайте добавлять какие-либо положительные полезные комментарии ... Вот код для RightFax добавления приложений к факсу.

$ AttachURL = "http: //" + $ RESTAPIServer + "/ RightFax / API / Attachments" $ Base = [System.Convert] :: ToBase64String ([System.Text.Encoding] :: UTF8.GetBytes ($ RESTAPIUser + ":" + $ RESTAPIPassword)) $ vCenterSessionURL = $ BaseAuthURL

$ Header = @ {"Authorization" = "Basi c" + [System.Convert] :: ToBase64String ([System.Text.Encoding ] :: UTF8.GetBytes ($ RESTAPIUser + ":" + $ RESTAPIPassword))} $ TARGET_FOLDER_PATH = "\ SomeFolderPath \" $ TokenUri = "http: //" + $ RESTAPIServer + "/ RightFax / API / Login? RememberMe = { запомнитьMe} "

$ Token = Invoke-RestMethod -Method GET -Headers $ Header -Uri $ TokenUri

Get-ChildItem $ TARGET_FOLDER_PATH -Filter * .pdf | Foreach-Object {

              $TARGET_FILE_NAME = $_.Name
              $LDA_TARGET_FILE_NAME = $TARGET_FOLDER_PATH + $TARGET_FILE_NAME 

              $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
              $headers.Add("Authorization", "Basic $Base")


              $fileName = $TARGET_FILE_NAME
              $uri = $AttachURL
              $filePath = $LDA_TARGET_FILE_NAME

             $fileRead = [IO.File]::ReadAllBytes($filePath)
             $enc = [System.Text.Encoding]::GetEncoding("iso-8859-1")
             $fileEnc = $enc.GetString($fileRead)
              $boundary = [System.Guid]::NewGuid().ToString()

             $LF = "`r`n"
             $bodyLines = (
              "--$boundary",
              "Content-Disposition: form-data; name=`"$fileName`"; filename=`"$ResultFilePath`"",   # filename= is optional
              "Content-Type: application/pdf$LF",
              $fileEnc,

             "--$boundary--$LF"
             ) -join $

   $Attach = Invoke-RestMethod -Uri $uri -Headers $headers -Method Post -ContentType "multipart/form-data; boundary=`"$boundary`"" -TimeoutSec 20 -Body $bodyLines
  Write-host $Attach

}

...