In general, you can make FTP work through firewalls by using proxy servers such as FTP-GW in the firewall toolkit or by allowing access to connect to the network in a limited range of ports (using rules such as "established" shielding rules to restrict access to the above ports). Then, modify the FTP client so that it connects the data port to a port within the allowable port range. This requires the ability to modify the FTP client application on the internal host.
In some cases, if the FTP download is what you would like to support, you might consider declaring FTP as a "Dead Protocol" (dead Protocol) and letting the user download the file via the Web. If you choose the Ftp-via-web method, the user will not be able to use FTP to transfer files outside, which may cause problems, but it depends on what you are trying to accomplish.
Another alternative is to use the FTP "PASV" option to instruct the remote FTP server to allow the client to start the connection. The PASV approach assumes that the FTP server on the remote system supports this operation. (Please refer to RFC1579 for more information)
Other sites prefer to establish a client version of the FTP program that is linked to the socks library.