=====Script Example: FTP Client to transfer a file to an FTP Server=====
This script uses the FTPClient from Apache Commons Net. It includes testing for all errors after each step, except timeouts. fileName and its localPath are passed in as parameters. The return is a String which has the error description in it, or is "Success" if no error. Uses ftp parameters set in ErgoTechConfiguration. properties.
The example below is set up as a function. Place the function code at the top of your script, with the main script and code that calls this function below it. For example:
function ftpFile (fileName,localPath) {
....
}
//Main script
//call the ftp with a filename and path
result = ftpFile("myFile.txt","./where/my/file/is/");
if (result.equals("Success") {
//file was successfully transferred.
} else {
//there was an error
print(result);
}
====Setup====
This script will read system properties set up when MIStudio, MIX, or TransSECS starts up. These properties are added to the ErgoTechConfiguration.properties file (or mix.properties if running MIX).
Add these lines to the ErgoTechConfiguration.properties file:
#for ftp
ftpHostname = hostname
ftpPort = 21
ftpLogin = admin
ftpPassword = admin
ftpDestDir = somepath/on/ftpserver
If the ftpHostname is blank, ftp will be disabled.
====Script for FTP====
//FTP the a file to the server configured in ErgoTechConfiguration.properties
function ftpFile (fileName,localPath) {
var System = Java.type("java.lang.System");
hostname = System.getProperty("ftpHostname",""); //hostname can be an ip address or a named server as long as the name resolves
if (hostname.length>0) {//if ftpHostname is not set, do not try to ftp
port = System.getProperty("ftpPort",21);//default to 21 if not set
login = System.getProperty("ftpLogin");
password = System.getProperty("ftpPassword");
destinationDir = System.getProperty("ftpDestDir",".");
var FTPClient = Java.type("org.apache.commons.net.ftp.FTPClient");
var FileInputStream = Java.type("java.io.FileInputStream");
ftpClient = new FTPClient();
ftpClient.setDataTimeout(5000);
ftpClient.setDefaultTimeout(5000);
ftpClient.setConnectTimeout(5000);
try {
ftpClient.connect(hostname,port);
} catch (e) {
//exception can be IOException or UnknownHostException
if (e instanceof java.io.IOException) {
return ("Could not connect to ftp server "+hostname+" on port "+port);
} else if (e instanceof java.net.UnknownHostException) {
return ("Unknown host "+hostname);
}
return ("Unknown connection error to host "+hostname+" on port "+port);
}
result=ftpClient.login(login,password);
if (result==0) { //could not login
ftpClient.disconnect();
return("Could not log in to ftp server (invalid username or password)");
}
result = ftpClient.changeWorkingDirectory(destinationDir);
if ( result==0) {
//directory did not exist probably
ftpClient.logout();
ftpClient.disconnect();
return("Could not change to directory "+destinationDir+" on ftp server");
}
ftpClient.setDataTimeout(400);
ftpClient.enterLocalPassiveMode(); //client to server data transfer
//transfer the file
is = new FileInputStream(localPath + fileName);
result = ftpClient.storeFile(fileName,is);
if (result==0) {
is.close();
ftpClient.logout();
ftpClient.disconnect();
return("FTP transfer of file "+fileName+" failed after successful login");
}
is.close();
ftpClient.logout();
ftpClient.disconnect();
return("Success");
} else {
return("ftpHostname is not set in ErgoTechConfiguration.properties, not transferring file " + fileName);
}
} //end of ftpFile function
====Running the FTP Client script====
The Apache Commons Net 3.x jar (i.e. commons-net-3.1.jar) will need to be on the classpath to run this script. This is included in MIStudio and the TransSECS Devices installation, so this script will run when tested in these environments. To make sure the library is available at runtime, place the Apache Commons Net jar into the Drivers directory of your MIStudio project, or in the addons directory of your TransSECS Devices project.