Sample code for 30+ languages & platforms
Ruby

Xero Upload File (Files API)

Demonstrates how to upload a file to a Xero folder.

Note: This example requires Chilkat v9.5.0.64 or greater.

Chilkat Ruby Downloads

Ruby
require 'chilkat'

success = false

# Note: Requires Chilkat v9.5.0.64 or greater.

# This requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.

rest = Chilkat::CkRest.new()

# Before sending REST API calls, the REST object needs to be
# initialized for OAuth1.
# See Xero 2-Legged OAuth1 Setup for sample code.

# Assuming the REST object's OAuth1 authenticator is setup, and the initial
# connection was made, we may now send REST HTTP requests..

# --------------------------------------------------------------
# This example will upload a file to a folder using the Xero FILES API

folderID = "0ffca059-f2f1-4271-8de9-4b87c8c2c638"
# This JPG image can be downloaded from https://www.chilkatsoft.com/syncedImages/penguins.jpg
filename = "penguins.jpg"

sbPath = Chilkat::CkStringBuilder.new()
sbPath.Append("/files.xro/1.0/Files/{FolderId}")
numReplaced = sbPath.Replace("{FolderId}",folderID)

rest.AddHeader("Content-Type","image/jpeg")

# Load the JPG image from a file.
jpgData = Chilkat::CkBinData.new()
success = jpgData.LoadFile("qa_data/jpg/penguins.jpg")

# We could alternatively get it from a URL like this:
jpgDataFromWeb = Chilkat::CkBinData.new()
http = Chilkat::CkHttp.new()
success = http.QuickGetBd("https://www.chilkatsoft.com/syncedImages/penguins.jpg",jpgDataFromWeb)
if (success != true)
    print http.lastErrorText() + "\n";
    exit
end

# 
# Put the file data in the 1st sub-part in the multipart/form-data request we'll be sending.
rest.put_PartSelector("1")
rest.SetMultipartBodyBd(jpgData)

# Set request headers in the 1st subpart (as indicated by the PartSelector)
rest.AddHeader("Content-Type","image/jpeg")
rest.AddHeader("Content-Disposition","multipart/form-data; name=Xero; filename=penguins.jpg")

# Restore the PartSelector to an empty string.
rest.put_PartSelector("")

rest.AddHeader("Content-Type","multipart/form-data")

# Upload with a multipart/form-data POST
responseJson = rest.fullRequestMultipart("POST",sbPath.getAsString())
if (rest.get_LastMethodSuccess() != true)
    print rest.lastErrorText() + "\n";
    exit
end

json = Chilkat::CkJsonObject.new()
json.Load(responseJson)
json.put_EmitCompact(false)

# A 201 response is expected for actual success.
# The Xero documentation doesn't explicitly state it, but that's what we've found in testing.
# To be safe, we'll check for either 200 or 201.
if ((rest.get_ResponseStatusCode() != 200) and (rest.get_ResponseStatusCode() != 201))
    print json.emit() + "\n";
    exit
end

# Examine the JSON response
print json.emit() + "\n";

# A successful response looks like this:

# 	{ 
# 	  "Name": "penguins.jpg",
# 	  "MimeType": "image/jpeg",
# 	  "Size": 777835,
# 	  "CreatedDateUtc": "2016-11-12T15:31:53.4230000",
# 	  "UpdatedDateUtc": "2016-11-12T15:31:53.4230000",
# 	  "User": { 
# 	    "Name": "admin@chilkatsoft.com",
# 	    "FirstName": "Matthew",
# 	    "LastName": "Smith",
# 	    "FullName": "Matthew Smith",
# 	    "Id": "c362fe42-cb12-461f-b84a-c281c1a74841"
# 	  },
# 	  "FolderId": "0ffca059-f2f1-4271-8de9-4b87c8c2c638",
# 	  "Id": "f042e9a3-a31d-4595-b8b3-6030ea6084bb"
# 	}