File Upload Encoding

File upload (PUT) operations use multipart/form-data encoding.

Example

PUT /api/v1/files/cliScript/incremental HTTP/1.1
Host: 10.4.219.229
Authorization: Basic QWRtaW46QWRtaW4=
Content-Length: 210
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
 
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="cli.txt"
Content-Type: application/octet-stream
 
show system version
------WebKitFormBoundary7MA4YWxkTrZu0gW--

Use the following code snippets to generate proper format.

cURL

curl -i -X PUT -F "file=@cli.txt" -H "Expect:" -u Admin:Admin \
http://10.4.219.229/api/v1/files/cliScript/incremental 

Python

import requests
import base64
 
def send_cli(ip, username, password, cli_script):
    url = 'http://' + ip + '/api/v1/files/cliScript/incremental'
    cred = username + ':' + password
    cred_encoded = base64.b64encode(cred.encode()).decode()
    headers = {'Authorization': 'Basic ' + cred_encoded}
    files = {'file': ('cli.txt', cli_script)}
    response = requests.put(url, files=files, headers=headers)
    return response.status_code, response.text
 
send_cli('10.4.219.229', 'Admin', 'Admin', 'show system version')

PowerShell

$cliData = "show system version"
$ip = "10.4.219.229"
$username = "Admin"
$password = "Admin"
 
$URL = "http://{0}/api/v1/files/cliScript/incremental" `
    -f $ip
 
$authHash = [Convert]::ToBase64String( `
    [Text.Encoding]::ASCII.GetBytes( `
    ("{0}:{1}" -f $username,$password)))
 
$boundary = [System.Guid]::NewGuid().ToString(); 
$LF = "`r`n";
 
$bodyLines = ( 
    "--$boundary",
    ("Content-Disposition: form-data; name=`"file`";" + `
     " filename=`"file.txt`""),
    "Content-Type: application/octet-stream$LF",
    $cliData,
    "--$boundary--$LF" 
) -join $LF
 
$response = Invoke-RestMethod -Uri $URL -Method Put `
    -Headers @{Authorization=("Basic {0}" -f $authHash)} `
    -ContentType "multipart/form-data; boundary=$boundary" `
    -Body $bodyLines
$response | ConvertTo-Json

If you prefer to use a GUI tool, use the Postman (https://www.getpostman.com) application or Chrome extension and set it up as follows: