A simple way is to check for the $HTTP_REFERER.
This will contain the URL of the page that linked to the current URL.
You can make a simple script that will 'passthru' the file for the user to download.
That script can simply check the $HTTP_REFERER, and if the 'referring' address is not on your website, you refuse the download.
That way the only way to download the file is to first visit your webpage that has the link to the file on it.
Ofcourse the real hackers will not have a big problem to spoof the referer, but the average user will not go to such lengths just to save one click.