It's possible that the local filename differs from the remote one. This code should manage this case:
```
public void put(String destination, File source, String username, String password) throws TransportException {
	try {
		URL dst = new URL(destination);
		File remote = new File(dst.getPath());

		FTPClient ftp = new FTPClient();
		ftp.connect(dst.getHost());
		ftp.login(username, password);

		// put the file into the correct place
		ftp.changeDirectory(remote.getParent());
		ftp.upload(source);

		// rename it
		ftp.rename(source.getName(), remote.getPath());
		ftp.disconnect(false);
	} catch (Exception e) {
		throw new TransportException(e);
	}
}
```
Does this work with your ftp server?