by
0
4
15k
733
Top 1% !
Popular
Pearl of Wisdom
Specified
Popularity: 272nd place
Created
Modified Mar 9, 2015
No tags for this snippet yet.
LanguagePowerShell
LicenseMIT_X11
SourceGitHub

PowerShell V3 Multipart/formdata example with REST-API (Invoke-RestMethod)

PowerShell V3 Multipart/formdata example with REST-API (Invoke-RestMethod): 
import-portatour.ps1
Copy Embed Code
<iframe id="embedFrame" style="width:600px; height:300px;"
src="https://www.snip2code.com/Embed/396726/PowerShell-V3-Multipart-formdata-example?startLine=0"></iframe>
Click on the embed code to copy it into your clipboard Width Height
Leave empty to retrieve all the content Start End
function Import-Portatour { param ( [parameter(Mandatory=$True,Position=1)] [ValidateScript({ Test-Path -PathType Leaf $_ })] [String] $FilePath, [parameter(Mandatory=$False,Position=2)] [System.URI] $ResultURL ) # CONST $CODEPAGE = "iso-8859-1" # alternatives are ASCII, UTF-8 # We have a REST-Endpoint $RESTURL = "https://my.portatour.net/a/api/ImportCustomers/" # Testing $userEmail = "some.user@example.org" # Read file byte-by-byte $fileBin = [System.IO.File]::ReadAllBytes($FilePath) # Convert byte-array to string $enc = [System.Text.Encoding]::GetEncoding($CODEPAGE) $fileEnc = $enc.GetString($fileBin) # Read a second hardcoded file which we want to upload through the API call $importConfigFileEnc = $enc.GetString([System.IO.File]::ReadAllBytes("C:\Users\xyz\Documents\WindowsPowerShell\portatour.importcfg")) # Create Object for Credentials $user = "Username" $pass = "Passw0rd" $secpasswd = ConvertTo-SecureString $pass -AsPlainText -Force $cred = New-Object System.Management.Automation.PSCredential ($user, $secpasswd) # We need a boundary (something random() will do best) $boundary = [System.Guid]::NewGuid().ToString() # Linefeed character $LF = "`r`n" # Build up URI for the API-call $uri = $RESTURL + "?userEmail=$userEmail&mode=UpdateOrInsert" # Build Body for our form-data manually since PS does not support multipart/form-data out of the box $bodyLines = ( "--$boundary", "Content-Disposition: form-data; name=`"file`"; filename=`"Import.xlsx`"", "Content-Type: application/octet-stream$LF", $fileEnc, "--$boundary", "Content-Disposition: form-data; name=`"importConfig`"; filename=`"portatour.importcfg`"", "Content-Type: application/octet-stream$LF", $importConfigFileEnc, "--$boundary--$LF" ) -join $LF try { # Submit form-data with Invoke-RestMethod-Cmdlet Invoke-RestMethod -Uri $uri -Method Post -ContentType "multipart/form-data; boundary=`"$boundary`"" -Body $bodyLines -Credential $cred } # In case of emergency... catch [System.Net.WebException] { Write-Error( "REST-API-Call failed for '$URL': $_" ) throw $_ } }
If you want to be updated about similar snippets, Sign in and follow our Channels