Вы не хотите предоставлять ссылки на актуальные файлы.Лучше всего хранить файлы в недоступном для Интернета месте или устанавливать разрешения для папки, чтобы она была доступна только для вашего приложения, а не для анонимных пользователей.
Вы можете вести список пользовательскихфайлы в таблице user_files в вашей базе данных, а затем ссылка на скрипт загрузки, который определяет имя файла как переменную и доставляет файл пользователя в виде потока октетов.
string _fileName;
string _path = /*some user specific path*/ + "FileDir/" + name;
System.IO.FileInfo _file = new System.IO.FileInfo(_path);
if (_file.Exists)
{
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + _file.Name);
Response.AddHeader("Content-Length", _file.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.WriteFile(_file.FullName);
Response.End();
}