0

我正在尝试通过 RightFax Web Api 将 pdf 文件上传到 Right 传真中。我可以通过 PostMan 执行此操作,然后我可以发送附件。当我尝试通过 PowerShell 上传附件时,我只在实际传真前获得对象名称。System.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()
}
4

2 回答 2

0

我正在设置需要 base64 中的附件的不同传真服务 (SRFax)。

$file = [IO.File]::ReadAllBytes("C:\Users\Path\To\File.pdf") 
$filebase64 = [System.Convert]::ToBase64String($file)
于 2020-09-21T03:05:00.957 回答
0

我想到了。我需要对文件进行编码。对于那些在这里实际获得帮助而不是在这里为其他用户帖子扮演警察但忽略添加任何实际积极有用的评论的人...... 这是 RightFax 添加附件到传真的代码。

$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

                 $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
}
于 2020-05-01T13:14:38.890 回答