How to send and receive data from Salesforce to a FTP server
Through the salesforce service (Apex or others) you cannot directly communicate with an FTP server (either upload or download).
Your best bet would be to use an external application. Jitterbit Data Loader is the go to application for FTP interactions with salesforce.
You could also create your own service outside of the salesforce platform.