Mega Code Archive

 
Categories / Delphi / Files
 

How to send files across the internet using FTP

Title: How to send files across the internet using FTP Question: If I wish to send files to an FTP server how difficult is it to do? Answer: After HTTP, FTP is possibly the most used protocols. It allows files to be transferred to and from FTP servers. The only disadvantage with using FTP is that the username and password are sent unencrypted in plain text. Even Internet Explorer can handle FTP. The FTP protocol is reasonably easy to implement if you know how to use Winsock, but it has already been done by many people so this is probably one wheel you do NOT need to reinvent. The following list includes source code and they are free. ICS (Francois Piettes superb library at (http://users.swing.be/francois.piette/indexuk.htm ), Winshoes or Indy as it is now known (and soon to be included in Delphi 6 I believe) at http://www.nevrona.com/Indy/ and MonsterFtp which is on www.torry.ru on the Internet part of the VCL section under FTP. Of these I tried Monster FTP but found a bug using it within a firewall, but Winshoes version 7 (8 is now being released as Indy) worked fine and the code shown below shows just how simple it is to upload files using the FTP. I havent tried ICS or any other kits so apologies if I overlooked any. For any FTP account you need the following: Username Password Server URL (ftp:// ) or IP Address And optionally, a folder to change to, after the connection is established. In the code below, ftpObject is a Winshoes TSimpleFTPObject. FtpUpload is a record or class containing Server (Ip Address or Name), Username, Password, Timeout (in milliseconds) and optionally Directory (to change into). The file transferred is passed in as FilenametoSend.Just add your own error Procedure to deal with errors. Procedure Error(Const ErrorString:String); Depending on the type of file transferred you may wish to transfer files as binary or as Ascii. The only difference is that Ascii transferred files have Carriage Return/Line Feeds added or stripped (according to direction of flow) if between Unix systems and Windows. Note this needs to be slotted into a procedure or Method. try FtpObject.Hostname := FtpUpload.Server; FtpObject.Username := FtpUpload.Username; FtpObject.Password := FtpUpload.Password; Ftpobject.ConnectTimeout := Ftpupload.Timeout*1000; if not FTPObject.Connect then begin Error('failed to connect to server'); exit; end; except on E: Exception do begin Error(Format('Failed to connect to FTP server %s',[FTPUpload.Server])); EXIT; end; end; { Change Working Directory } try if FtpUpload.Directory '' then FtpObject.ChangeRemoteDir(FtpUpload.Directory); except on E: Exception do begin Error(Format('Failed to switch to FTP folder %s',[FtpUpload.Directory])); EXIT; end; end; //FTPObject.Mode(MODE_BYTE); FTPObject.Transfertype := ttBinary; LocalFile := CommonExportFolder + FTPUpload.FileNameToSend; { Includes date/time in remote file name to keep name unique on a resend } RemoteFile := Prefix + FormatDateTime('yyyymmddhhnnss', now) + NameList[i]; try FTpObject.PutQualifiedFile(LocalFile,RemoteFile); except Error('Failed Copying File '+Localfile+' To '+Remotefile); end; ------------------- To download files there is an equivalent .getQualifiedFile method.