Sample code for 30+ languages & platforms
Lua Requires Chilkat v10.1.2+

Upload to Tumbleweed SecureTransport FTPS Server

See more FTP Examples

Demonstrates how to connect, authenticate, and upload file to a Tumbleweed Secure Transport SSL FTP Server. Instead of providing a login name and password, you pass the string "site-auth" for the username, and an empty string for the password. You must also provide a client-side digital certificate -- as the certificate's credentials and validity are used to authenticate.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

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

local ftp = chilkat.Ftp2.new()

-- This code has been tested with the Tumbleweed server
-- at sft.wellsfargo.com
ftp.hostname = "sft.wellsfargo.com"

-- Use these exact strings for the username and password:
ftp.username = "site-auth"
ftp.password = ""

-- Establish an AUTH SSL secure channel after connecting.
-- Your client-side certificate is used for authentication when
-- the SSL channel is established.
ftp.auth_ssl = true

-- The Ssl property is for establishing an implicit SSL connection
-- on port 990.  Do not set it.
ftp.ssl = false

-- Load a certificate from a .pfx
-- A PFX may contain several certs, including the certificates
-- in a chain of authority.
local certStore = chilkat.CertStore.new()
local password = "***"
-- Load the certs from a PFX into an in-memory certificate store:
local success = certStore:load_pfx_file("my.pfx", password)
if not success then
    print(certStore.last_error_text)
    return
end

-- Find the desired certificate.
local jsonCN = chilkat.JsonObject.new()
jsonCN:update_string("CN", "cert common name")

local cert = chilkat.Cert.new()
success = certStore:find_cert(jsonCN, cert)
if not success then
    print("Certificate not found!")
    return
end

-- Tell the Chilkat FTP2 component to use the client-side
-- cert for the SSL connection:
success = ftp:set_ssl_client_cert(cert)

-- Connect and authenticate with the FTP server.
success = ftp:connect()
if not success then
    print(ftp.last_error_text)
    return
else
    -- LastErrorText contains information even when
    -- successful. This allows you to visually verify
    -- that the secure connection actually occurred.
    print(ftp.last_error_text)
end

print("Secure FTP Channel Established!")

-- Change to the remote directory where the file will be
-- uploaded.  If your file is to be uploaded to the FTP user
-- account's home directory, this is not necessary.
success = ftp:change_remote_dir("someSubDir")
if not success then
    print(ftp.last_error_text)
    return
end

-- You may include an absolute or relative path with the
-- local filename.  If no path is included, the file should
-- be present in the current working directory of the calling
-- process.
local localFilename = "someFile.dat"
local remoteFilename = "someFile.dat"

-- Upload the file.
success = ftp:put_file(localFilename, remoteFilename)
if not success then
    print(ftp.last_error_text)
    return
end

success = ftp:disconnect()