How to upload a file and have it available on the post for download?

To begin with you need to add the file as a post meta field, and on your backend – a meta box with a js calling the file uploader. One way of doing this is with the plugin Advanced Custom Fields can do this. ACF – WordPress plugins You can also do it yourself. Try googling “how to add a custom uploader meta field in wordpress” for details.
However you do it, create a custom meta field for file upload to attach to your posts.

After that, simply create a button in your post with the attached files URL (find it in the media uploader or media library) as href attribute.