Ruby
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
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"
# }