If either of you has a unix machine (Linux, Mac OS X, etc.) and is not behind a firewall that blocks incoming connections, that person can set up an ssh server and an account that allows SFTP. (Exchange “you” and “your friend” below if necessary.)
On Ubuntu, make sure the
openssh-server package is installed. Create a user account for your friend (through the GUI or the command line as you prefer). Set the account's shell to restrict it to SFTP:
chsh -s /usr/lib/sftp-server username. If your computer is behind a home router, make it route incoming port 22 (used by ssh) to your computer. Then give your public IP address and the account details to your friend. Your friend should use an SFTP client; unix file browsers can often browse
sftp:// URLs, and
sftp is available on the command line; on Windows, use Psftp.
On other unices, the steps outlined above should work with minor adjustments. On Windows, something similar may be possible, but I don't know how.
Note that your friend will be able to browse your whole filesystem. If that's a concern, use chroot (I don't have any simple instructions to offer); alternatively (and I think it would be a lot simpler, and it would eliminate the requirement for you to run unix), use a dedicated virtual machine (e.g. Ubuntu in VirtualBox).