Проблемы с использованием FileStore несколько:
1) Очистка - вам нужно оставить файл там достаточно долго, чтобы его можно было запросить и собрать, но как вы очищаетесь? Если вы этого не сделаете, вы рискуете нехватки места. Лучший способ - запускать запланированное задание так часто и удалять файлы старше, чем, скажем, час - но это все еще грязно.
2) Плохо масштабируется - если вы не пишете в SAN - в сценарии веб-сада / фермы запрос пользователя на файл может прийти на сервер, отличный от того, на котором он хранится - если вы не ограничите свою систему заставить все запросы пользователя использовать один и тот же сервер.
3) Не выполняется - по сравнению с операцией базы данных.
Так что я бы сказал, база данных наверняка - и это сделать гораздо проще, чем вы иллюстрируете.
Вместо создания файла и ссылки на него, верните файл как FileContentResult:
public FileContentResult GetFile(int fileId)
{
myFile MyFile = fileRepository.Get(fileId);
return MyFile(file.Data, file.MimeType);
}
}
где MyFile выглядит так:
public class MyFile
{
public MyFile(byte[] fileData, string mimeType)
{
this.FileData = fileData;
this.MimeType = mimeType;
}
public virtual int Id {get; private set;}
public virtual byte[] FileData { get; set; }
public virtual string MimeType { get; set; }
}
Для сохранения файла
[HttpPost]
public ActionResult SaveFile(HttpPostedFileBase userFile)
{
MyFile myFile = new MyFile(new byte[userFile.ContentLength], userFile.ContentType)
userFile.InputStream.Read(MyFile.FileData, 0, userFile.ContentLength);
fileRepository.Save(myFile);
}