Sample code for 30+ languages & platforms
Dart 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 Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // This example requires the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  final ftp = CkFtp2();

  // 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.authSsl = 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.
  final certStore = CkCertStore();
  final password = '***';
  // Load the certs from a PFX into an in-memory certificate store:
  try {
    certStore.loadPfxFile('my.pfx', password);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Find the desired certificate.
  final jsonCN = CkJsonObject();
  jsonCN.updateString('CN', 'cert common name');

  final cert = CkCert();
  try {
    certStore.findCert(jsonCN, cert);
  } on ChilkatException {
    print('Certificate not found!');
    return;
  }

  // Tell the Chilkat FTP2 component to use the client-side
  // cert for the SSL connection:
  ftp.setSslClientCert(cert);

  // Connect and authenticate with the FTP server.
  try {
    ftp.connect();
    // LastErrorText contains information even when
    // successful. This allows you to visually verify
    // that the secure connection actually occurred.
    print(ftp.lastErrorText);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  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.
  try {
    ftp.changeRemoteDir('someSubDir');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // 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.
  final localFilename = 'someFile.dat';
  final remoteFilename = 'someFile.dat';

  // Upload the file.
  try {
    ftp.putFile(localFilename, remoteFilename);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  ftp.disconnect();
}