It's most straightforward to send the data as a file in response to a GET request. There are plenty of web server examples to start from, some with SD card support. The easiest way is to read the file a byte at a time and send it to the network.
You can force a browser to download a resource instead of displaying it by including a "content disposition" header in the response headers, after the content-type header:
Content-Disposition: attachment; filename="filename.ext"
Search for "content disposition" for more.
So, find the place where the web server example is sending the Content-Type and add similar code to send the Content-Disposition. Then send your file, a byte at a time, and it will show up on the browser side as a downloaded file.