I have a ColdFusion application that I use to transfer files between our development and production servers. The code that actually sends the files is as follows:

ftp = new Ftp(); ftp.setUsername(username); ftp.setPassword(password); ftp.setServer(server); ftp.setTimeout(1800); ftp.setConnection('dev'); ftp.open(); ftp.putFile(transferMode="binary",localFile=localpath,remoteFile=remotepath); ftp.close(connection='dev');

When sending a file using the above code, I cap out at just under 100KB/s(monitored via FileZilla on the receiving server). If I send the exact same file using the Windows command-line FTP tool, my speeds are upwards of 1000KB/s.

I created a brand new file with nothing but the code above and that has no effect on the transfer speed, so I know it has nothing to do with the surrounding code in the original application.

So, what could be causing these abysmally low speeds?

Edit: All tests are being done transferring files from my production server to my development server. I also tried using the <cfftp> tag instead of cfscript, and I have the same results.

Edit #2: I ended up using cfexecute , the code is as follows:

From my FTP script:

public function sendFiles(required string localpath, required string remotepath) { this.writeFtpInstructions(localpath); exe = "C:\Windows\system32\ftp.exe"; params = "-s:" & request.localapproot & "/" & "upload.txt"; outputfile = request.localapproot & '/ftp.log'; timeout = 120; Request.cliExec(exe,params,outputfile,timeout); } public function writeFtpInstructions(required string localpath) { instructions = request.localapproot & "/" & "upload.txt"; crlf = chr(13) & chr(10); data = ""; data &= "open " & this.server & crlf; data &= this.username & crlf; data &= this.password & crlf; data &= "cd " & request.remoteapproot & crlf; data &= "put " & localpath & crlf; data &= "quit"; FileWrite(instructions, data); }

The cliExec() function(necessary to create a wrapper since there is no equivalent of cfexecute in cfscript):