Well the page could be split into two halves: one with the file uploading controls and the other that polls every 3-4 seconds via AJAX to see if there's new files.
Side "A" has a standard file upload control and uses the standard .NET way of saving uploaded files (see FileUpload.PostedFile.SaveAs(path), easy stuff). After the file upload is done, refresh this page.
Side "B" is a div that gets its contents from an AJAX call, XML, JSON or just plain ol' text. Have an AJAX page called "link.aspx" that kicks back the content in whatever format you want.
For the links, if you want to force the "download" window, then either the files need to be a type that isn't displayed normally in the browser, or you need to use another aspx page to serve out the file and force a dialog to Save or Open.
That aspx page will be called something like "file.aspx" and you could pass in a querystring param ("id" or something) to tell it what file you want. Your code behind of this page will figure out what file you need from that querystring param, then will serve out the file:
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.fileName);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "image/jpeg"; // you gotta figure out the content type of the file here though. This is just the one for JPEGS.
byte[] buffer = new byte[file.Length];
dl.Read(buffer, 0, (int)file.Length);
Response.BinaryWrite(buffer);
Response.End();