ColdFusion FTP Client Sample Source Code
Network Component provides an easy-to-use development interface to a variety of IP protocols. By using Network Component, you can very easily create or enhance applications with network features.
Network Component features the following: DNS, FTP, HTTP, HTTPs, ICMP Ping, IP-to-Country, MSN, NTP, RSH, SCP, SFTP, SNMP v1/v2c (Get, GetNext, Set), SNMP Traps, SNMP MIB, SSH, TCP, Telnet, TFTP, UDP, Telnet, Wake-On-LAN and more.
Network Component can be well integrated into any development platform that supports ActiveX objects.
This document describes how the Network Component FtpServer object can be integrated into your projects.
The most important functions of the FtpServer object are:
- Connect - connect to the (remote) FTP server on port 21 or any alternate port;
- Disconnect - to diconnect after a connect call;
- GetCurrentDir - retrieve the current directory;
- ChangeDir - change the current directory;
- CreateDir - create a new directory;
- RenameDir - rename a directory;
- DeleteDir - delete a directory;
- FindFile - find a specific file in the current directory;
- FindFirstFile - iterate over all files in the current directory; find the first file;
- FindNextFile - iterate over all files in the current directory; find the next file;
- RenameFile - rename a file in the current directory;
- DeleteFile - delete a file in the current directory;
- GetFile - get (download) a file, either using binary transfer or ASCII transfer;
- PutFile - put (upload) a file, either using binary transfer or ASCII transfer;
Step 1: Download and install the Network Component
Download Network Component from the ActiveXperts Download Site and start the installation. The installation guides you through the installation process.
Step 2: Create a new ColdFusion document
Create a new blank webdocument with the ".cfm" extention. First of all we are going to build the form whitch commands and properties of the device can be filled in. Then we are going to make a source code that connects to the device.
Step 3: Implementation
Establishing the connection and listing the files can be done in three steps:
- Collect the ftp-server-address, the username and the password from the user
- Establish the connection
- List the files
Collecting the information can be done using a form. We've made our form look like this:
(Click on the picture to enlarge)When we've got this information, we're ready to establish a connection to a server. First of all we need an object witch creates a connection between ColdFusion and the ActiveXperts software. To do that, use the following code:
<cfobject class="AxNetwork.FtpServer" type="com" name="objFtp" Action="Create">
Once the object is created, we're able to use the component. We need to establish a connection, so we're going to use the Network Component method "connect()". Use the following code:
objFtp.Connect(strHost,strUsername,strPassword);
Now we need to list the files. The Network Component is able to get the first file in the folder using the "FindFirstFile()" method and then the next file using the "FindNextFile()" method. So we're going to list the first file in the folder first, then the next file (the second file) and than the next file (the third file) and so on. Use the following code:
objFiles = objFtp.FindFirstFile(); do{ writeoutput (""); writeoutput (" "); objFiles = objFtp.FindNextFile(); } while(objFtp.LastError eq 0);"); if(objFiles.IsDirectory()){ writeoutput("Directory:"); } else{ writeoutput("File:"); } writeoutput (" "); writeoutput (""); writeoutput(objFiles.Name & " "); writeoutput ("
"); writeoutput ("
Perhaps you would like to show the content of another folder. Paste the following code, before the listing code.
objFtp.ChangeDir(strDirectory);
We're displaying the results of the process using the "LastError" method of the Network Component. The method "LastError" displays a number. It's helpfull to know "0" means success. To get the error description use the "GetErrorDescription()" method. In our code we've used these methodes this way:
strResult = objFtp.LastError & " : " & objFtp.GetErrorDescription(objFtp.LastError);
It can be very helpfull to check for errors before executing some code. Applying this can be done easily:
if(objFtp.LastError eq "0"){ Some code }
Appendix: Full source code
<cfobject class="AxNetwork.FtpServer" type="com" name="objFtp" Action="Create"> <cfoutput> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Untitled</title> <style> <!-- body{ text-align: center; } h2{ font-family: verdana; color: navy; font-weight: bold; } form{ margin: 0px; } .input{ font-family: verdana; font-size: 9pt; color: navy; border: 1px solid navy; background-color: white; width: 325; } .button{ font-family: verdana; font-size: 9pt; width: 325px; } .table{ font-family: verdana; font-size: 9pt; color: navy; border: 1px solid navy; width: 500; } div{ width: 450px; height: 400px; overflow: auto; text-align: left; font-size: xx-small; font-family: verdana; border: 1px solid navy; } --> </style> </head> <body> </cfoutput> <cfscript> strHost = "ftp.activexperts-lab.com"; strUsername = ""; strPassword = ""; strDirectory = "/Samples/network-component"; strLogfile = GetTempDirectory() & "ftp.log"; strComponent = "Module [" & objFtp.Module & "]; Build [" & objFtp.Build & "]"; if(isDefined("URL.host")){ strHost = URL.host; } if(isDefined("URL.username")){ strUsername = URL.username; } if(isDefined("URL.password")){ strPassword = URL.password; } if(isDefined("URL.directory")){ strDirectory = URL.directory; } if(isDefined("URL.logfile")){ strLogfile = URL.logfile; } </cfscript> <cfoutput> <form> <h2>ActiveXperts Network Component CF Sample - FTP</h2> <table class=table> <tr> <td>Component:</td> <td>#strComponent#</td> </tr> <tr> <td>FTP Server:</td> <td><input class=input type=text name="host" value="#strHost#"></td> </tr> <tr> <td>FTP Account:</td> <td><input class=input type=text name=username value="#strUsername#"></td> </tr> <tr> <td>FTP Password:</td> <td><input class=input type=password name="password" value="#strPassword#"></td> </tr> <tr> <td>Change directory:</td> <td><input class=input type=text name="directory" value="#strDirectory#"></td> </tr> <tr> <td> </td> <td><input type=submit value="Connect" name="submitbutton" class=button></td> </tr> <tr> <td>Logfile:</td> <td><input class=input type=text name="logfile" value="#strLogfile#"></td> </tr> </table> </form> <br> <table class=table> </cfoutput> <cfscript> if(IsDefined("URL.submitbutton")){ objFtp.LogFile = strLogFile; objFtp.Connect(strHost,strUsername,strPassword); if(objFtp.LastError eq "0" and strDirectory neq ""){ objFtp.ChangeDir(strDirectory); } if(objFtp.LastError eq "0"){ objFiles = objFtp.FindFirstFile(); do{ writeoutput ("<tr>"); writeoutput ("<td>"); if(objFiles.IsDirectory()){ writeoutput("Directory:"); } else{ writeoutput("File:"); } writeoutput ("</td>"); writeoutput ("<td>"); writeoutput(objFiles.Name & "<br>"); writeoutput ("</td>"); writeoutput ("</tr>"); objFiles = objFtp.FindNextFile(); } while(objFtp.LastError eq 0); } } if(objFtp.Lasterror eq 22510){ result = "0: Success"; } else{ result = objFtp.LastError & ": " & objFtp.GetErrorDescription(objFtp.LastError); } </cfscript> <cfoutput> </table> <br> <table class=table> <tr> <td><b>Result: </b></td> <td>#result#</td> </tr> </table> <p>This sample is based on ActiveXperts Network Component, an <a target="blank" href="https://www.activexperts.com">ActiveXperts Software</a> product.</p> <a href="index.cfm">Back to main page</a> </body> </html> </cfoutput>
You can download the complete samples here. There are many other working Network Component scripts on our site and shipped with the product.